Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी प्रोग्राम में थ्रेड सिंक्रोनाइज़ेशन का उपयोग करके क्रम में प्रिंट नंबर।

थ्रेड्स के साथ दिए गए प्रोग्राम को 0 से 10 तक उनकी प्राथमिकताओं के आधार पर थ्रेड को प्रिंट करना चाहिए।

धागा क्या है?

थ्रेड एक हल्की प्रक्रिया है जो एक प्रोग्राम के अंदर चलती है। एक साधारण प्रोग्राम में n संख्या में थ्रेड हो सकते हैं।

जावा के विपरीत, मल्टीथ्रेडिंग भाषा मानकों द्वारा समर्थित नहीं है, POSIX थ्रेड्स (Pthreads) C/C++ में मल्टीथ्रेडिंग में उपयोग किया जाने वाला मानक है। सी में बहु-थ्रेडेड अनुप्रयोगों के लिए कोई अंतर्निहित समर्थन नहीं है। इसके बजाय, यह सुविधा प्रदान करने के लिए यह पूरी तरह से ऑपरेटिंग सिस्टम पर निर्भर करता है।

यह हमारे प्रोग्राम में कैसे काम करता है?

थ्रेड फ़ंक्शंस का उपयोग करने के लिए हम हेडर फ़ाइल #include का उपयोग करते हैं। इस हेडर फ़ाइल में हमारे प्रोग्राम में थ्रेड से संबंधित सभी फ़ंक्शन शामिल होंगे जैसे pthread_create (), आदि।

अब कार्य gcc कंपाइलर के साथ मौजूद pthread मानक पुस्तकालय का उपयोग करके n थ्रेड्स की संख्या को सिंक्रनाइज़ करना है। विचार है कि थ्रेड काउंट लें और पहले थ्रेड में 1 प्रिंट करें, दूसरे थ्रेड में 2 प्रिंट करें, तीसरे थ्रेड में 3 को 10 वें थ्रेड तक प्रिंट करें। थ्रेड की प्राथमिकताओं के आधार पर आउटपुट में 1 से 10 तक की संख्याएं होंगी।

एल्गोरिदम

Start
Step 1 -> Declare global variables as int MAX=10 and count=1
Step 2 -> declare variable thr of pthread_mutex_t and cond of pthread_cond_t
Step 3 -> Declare Function void *even(void *arg)
   Loop While(count < MAX)
      Call pthread_mutex_lock(&thr)
      Loop While(count % 2 != 0)
         Call pthread_cond_wait(&cond, &thr)
      End
      Print count++
      Call pthread_mutex_unlock(&thr)
      Call pthread_cond_signal(&cond)
   End
   Call pthread_exit(0)
Step 4 -> Declare Function void *odd(void *arg)
   Loop While(count < MAX)
      Call pthread_mutex_lock(&thr)
      Loop While(count % 2 != 1)
         Call pthread_cond_wait(&cond, &thr)
      End
      Print count++
      Call pthread_mutex_unlock(&thr)
      Call pthread_cond_signal(&cond)
   End
   Set pthread_exit(0)
Step 5 -> In main()
   Create pthread_t thread1 and pthread_t thread2
   Call pthread_mutex_init(&thr, 0)
   Call pthread_cond_init(&cond, 0)
   Call pthread_create(&thread1, 0, &even, NULL)
   Call pthread_create(&thread2, 0, &odd, NULL)
   Call pthread_join(thread1, 0)
   Call pthread_join(thread2, 0)
   Call pthread_mutex_destroy(&thr)
   Call pthread_cond_destroy(&cond)
Stop
पर कॉल करें

उदाहरण

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
int MAX = 10;
int count = 1;
pthread_mutex_t thr;
pthread_cond_t cond;
void *even(void *arg){
   while(count < MAX) {
      pthread_mutex_lock(&thr);
      while(count % 2 != 0) {
         pthread_cond_wait(&cond, &thr);
      }
      printf("%d ", count++);
      pthread_mutex_unlock(&thr);
      pthread_cond_signal(&cond);
   }
   pthread_exit(0);
}
void *odd(void *arg){
   while(count < MAX) {
      pthread_mutex_lock(&thr);
      while(count % 2 != 1) {
         pthread_cond_wait(&cond, &thr);
      }
      printf("%d ", count++);
      pthread_mutex_unlock(&thr);
      pthread_cond_signal(&cond);
   }
   pthread_exit(0);
}
int main(){
   pthread_t thread1;
   pthread_t thread2;
   pthread_mutex_init(&thr, 0);
   pthread_cond_init(&cond, 0);
   pthread_create(&thread1, 0, &even, NULL);
   pthread_create(&thread2, 0, &odd, NULL);
   pthread_join(thread1, 0);
   pthread_join(thread2, 0);
   pthread_mutex_destroy(&thr);
   pthread_cond_destroy(&cond);
   return 0;
}

आउटपुट

यदि हम उपरोक्त प्रोग्राम चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा

1 2 3 4 5 6 7 8 9 10

  1. सी . में नंबर कॉलम वार प्रिंट करने का कार्यक्रम

    कार्यक्रम विवरण नीचे दिखाए गए अनुसार प्राकृतिक संख्या कॉलम के अनुसार प्रिंट करें 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 एल्गोरिदम i stands for rows and j stands for columns. 5 stands for making pattern for 5 Rows and Columns Loop for each Row (i) K is initialized to i Loop for each Column (j) Do the P

  1. C प्रोग्राम में O(1) अतिरिक्त स्थान का उपयोग करके n x ​​n सर्पिल मैट्रिक्स प्रिंट करें।

    हमें एक धनात्मक पूर्णांक n दिया गया है और n x n का एक सर्पिल मैट्रिक्स बनाते हैं, केवल O(1) अतिरिक्त स्थान का उपयोग करके दक्षिणावर्त दिशा में सर्पिल मैट्रिक्स एक मैट्रिक्स है जो एक सर्पिल की तरह काम करता है जो एक सर्कल की उत्पत्ति से शुरू होगा और दक्षिणावर्त फैशन में घूमता है। तो कार्य 2 → 4 → 6 →

  1. सी प्रोग्राम में मैट्रिक्स विकर्ण पैटर्न में प्रिंट नंबर।

    कार्य विकर्ण पैटर्न के n x ​​n के मैट्रिक्स को प्रिंट करना है। यदि n 3 है तो विकर्ण पैटर्न में एक मैट्रिक्स को प्रिंट करना है - तो आउटपुट इस तरह होगा - उदाहरण Input: 3 Output:    1 2 4    3 5 7    6 8 9 Input: 4 Output:    1 2 4  7    3 5