मैं 2 थ्रेड के लिए pthread_cond_wait
लागू करने की कोशिश कर रहा हूं।2 थ्रेड के लिए pthread_cond_wait
- थ्रेड बी इंतजार हालत के लिए
- थ्रेड एक प्रिंट "हैलो" पांच बार
- थ्रेड एक संकेत धागा
- थ्रेड एक: मेरे परीक्षण कोड इस परिदृश्य पर पहिले से दो धागे का उपयोग करने की कोशिश कर रहा है
- थ्रेड बी प्रिंट "गुडबाय"
- थ्रेड बी संकेतों थ्रेड
- लूप शुरू करने के लिए (x5) इंतजार कर रहा है
अब तक कोड पांच बार "हैलो" प्रिंट करता है और फिर अटक जाता है। उदाहरण से मैं देखा है ऐसा लगता है पर मैं सही रास्ते पर हूँ "लॉक म्युटेक्स, रुको, अन्य धागा द्वारा संकेत मिलता है, म्युटेक्स अनलॉक, सामान, पाश करना"
टेस्ट कोड:
//Import
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
//global variables
pthread_cond_t condA = PTHREAD_COND_INITIALIZER;
pthread_cond_t condB = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *threadA()
{
int i = 0, rValue, loopNum;
while(i<5)
{
//unlock mutex
rValue = pthread_mutex_unlock(&mutex);
//do stuff
for(loopNum = 1; loopNum <= 5; loopNum++)
printf("Hello %d\n", loopNum);
//signal condition of thread b
rValue = pthread_cond_signal(&condB);
//lock mutex
rValue = pthread_mutex_lock(&mutex);
//wait for turn
while(pthread_cond_wait(&condA, &mutex) != 0)
i++;
}
}
void *threadB()
{
int n = 0, rValue;
while(n<5)
{
//lock mutex
rValue = pthread_mutex_lock(&mutex);
//wait for turn
while(pthread_cond_wait(&condB, &mutex) != 0)
//unlock mutex
rValue = pthread_mutex_unlock(&mutex);
//do stuff
printf("Goodbye");
//signal condition a
rValue = pthread_cond_signal(&condA);
n++;
}
}
int main(int argc, char *argv[])
{
//create our threads
pthread_t a, b;
pthread_create(&a, NULL, threadA, NULL);
pthread_create(&b, NULL, threadB, NULL);
pthread_join(a, NULL);
pthread_join(b,NULL);
}
सही दिशा में एक सूचक की बहुत सराहना की जाएगी, धन्यवाद! ("gcc timeTest.c -o timeTest -lpthread" का उपयोग कर लिनक्स पर संकलित कोड)
नहीं, इसकी आवश्यकता नहीं है, मैं मुख्य रूप से भिन्नताओं की कोशिश कर रहा था लेकिन जैसा कि आपने कहा था कि यह केवल –