समस्या विवरण
दिए गए थ्रेड्स के आधार पर प्रोग्राम को उनकी प्राथमिकताओं के आधार पर 0 से 10 तक प्रिंट करना होगा।
थ्रेड क्या है?
थ्रेड एक हल्की प्रक्रिया है जो प्रोग्राम के अंदर चलती है। एक साधारण प्रोग्राम में n संख्या में थ्रेड हो सकते हैं।
यह हमारे प्रोग्राम में कैसे काम करता है?
थ्रेड फ़ंक्शन का उपयोग करने के लिए हम #include <pthread.h> हेडर फ़ाइल का उपयोग करते हैं। इस हेडर फ़ाइल में हमारे प्रोग्राम में थ्रेड से संबंधित सभी फ़ंक्शन शामिल होते हैं जैसे pthread_create(), आदि।
एल्गोरिदम
शुरुआत
चरण 1: ग्लोबल वेरिएबल घोषित करें MAX=10 और count=1
चरण 2: thr को pthread_mutex_t और cond को pthread_cond_t के रूप में घोषित करें
चरण 3: void *even(void *arg) फंक्शन घोषित करें
जब तक (count < MAX) लूप
pthread_mutex_lock(&thr) कॉल करें
जब तक (count % 2 != 0) लूप
pthread_cond_wait(&cond, &thr) कॉल करें
अंत
count++ प्रिंट करें
pthread_mutex_unlock(&thr) कॉल करें
pthread_cond_signal(&cond) कॉल करें
अंत
pthread_exit(0) कॉल करें
चरण 4: void *odd(void *arg) फंक्शन घोषित करें
जब तक (count < MAX) लूप
pthread_mutex_lock(&thr) कॉल करें
जब तक (count % 2 != 1) लूप
pthread_cond_wait(&cond, &thr) कॉल करें
अंत
count++ प्रिंट करें
pthread_mutex_unlock(&thr) कॉल करें
pthread_cond_signal(&cond) कॉल करें
अंत
pthread_exit(0) सेट करें
चरण 5: 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) कॉल करें
रोकें
C प्रोग्राम उदाहरण
#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