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

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

यहां हम देखेंगे कि विभिन्न थ्रेड्स का उपयोग करके संख्याओं को सही क्रम में कैसे प्रिंट किया जाए। यहां हम थ्रेड्स की संख्या बनाएंगे, फिर उन्हें सिंक्रोनाइज़ करेंगे। विचार यह है कि पहला धागा 1 प्रिंट करेगा, फिर दूसरा धागा 2 प्रिंट करेगा और इसी तरह। जब एक थ्रेड प्रिंट करने का प्रयास कर रहा होता है, तो यह संसाधन को लॉक कर देगा, इसलिए कोई भी थ्रेड उस हिस्से का उपयोग नहीं कर सकता है।

उदाहरण

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t* cond = NULL;
int threads;
volatile int count = 0;
void* sync_thread(void* num) { //this function is used to synchronize the threads
   int thread_number = *(int*)num;
   while (1) {
      pthread_mutex_lock(&mutex); //lock the section
      if (thread_number != count) { //if the thread number is not same as count, put all thread
          except one into waiting state
         pthread_cond_wait(&cond[thread_number], &mutex);
      }
      printf("%d ", thread_number + 1); //print the thread number
         count = (count+1)%(threads);
      // notify the next thread
      pthread_cond_signal(&cond[count]);
      pthread_mutex_unlock(&mutex);
   }
   return NULL;
}
int main() {
   pthread_t* thread_id;
   volatile int i;
   int* thread_arr;
   printf("\nEnter number of threads: ");
      scanf("%d", &threads);
   // allocate memory to cond (conditional variable) thread id's and array of size threads
   cond = (pthread_cond_t*)malloc(sizeof(pthread_cond_t) * threads);
   thread_id = (pthread_t*)malloc(sizeof(pthread_t) * threads);
   thread_arr = (int*)malloc(sizeof(int) * threads);
   for (i = 0; i < threads; i++) { //create threads
      thread_arr[i] = i;
      pthread_create(&thread_id[i], NULL, sync_thread, (void*)&thread_arr[i]);
   }
   // waiting for thread
   for (i = 0; i < threads; i++) {
      pthread_join(thread_id[i], NULL);
   }
   return 0;
}

आउटपुट

$ g++ test.cpp -lpthread
$ ./a.out

Enter number of threads: 5
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3
4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3
4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1
2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4
5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2
3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
...
...
...

  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 . में नॉन स्क्वायर नंबर प्रिंट करें

    कार्यक्रम विवरण किसी संख्या का वर्ग उस संख्या का स्वयं का गुणा होता है। एक वर्ग संख्या या पूर्ण वर्ग एक पूर्णांक है जो एक पूर्णांक का वर्ग होता है; पूर्ण वर्ग पूर्ण संख्याओं के वर्ग होते हैं 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 यहां 1 से 100 तक के सभी पूर्ण वर्गों के वर्गमूल दिए गए हैं। √1

  1. पायथन में एक सूची प्रिंट करें

    सूची तत्वों का एक क्रम है। अनुक्रम में कोई भी तत्व क्रम में अपनी स्थिति से पहुँचा जा सकता है। इंडेक्स 0 से शुरू होता है। इसलिए लिस्ट [2] इंडेक्स 2 पर एलिमेंट लौटाएगा, लिस्ट में तीसरा यानी 50।