थ्रेड्स के साथ दिए गए प्रोग्राम को 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