c - pthread_cond_broadcast does not work? -
मैंने यह प्रोग्राम लिखा है:
pthread_cond_t placeFootCondition; Pthread_mutex_t आरएफ, एलएफ; शून्य * आरएसएस (शून्य * में) {जबकि (1) {pthread_mutex_lock (& amp; आरएफ); Printf ("आरएसएस: हालत की प्रतीक्षा कर रहा है \ n"); pthread_cond_wait (& amp; placeFootCondition, & amp; आरएफ); Printf ("सही एकल समर्थन \ n"); नींद (1); pthread_mutex_unlock (& amp; आरएफ); }} शून्य * lss (शून्य * में) {जबकि (1) {pthread_mutex_lock (& amp; एलएफ); Printf ("lss: हालत की प्रतीक्षा कर रहा है \ n"); pthread_cond_wait (& amp; placeFootCondition, & amp; वामो); Printf ("सिंगल समर्थन छोड़ें \ n"); नींद (1); pthread_mutex_unlock (& amp; वामो); }} Int main () {int rc; pthread_mutex_init (& amp; आरएफ, शून्य); pthread_mutex_init (& amp; वामो, शून्य); pthread_cond_init (& amp; placeFootCondition, शून्य); pthread_create (& amp; t1, शून्य, आरएसएस, शून्य); pthread_create (& amp; t2, शून्य, LSS, शून्य); नींद (1); rc = pthread_cond_broadcast (& amp; placeFootCondition); अगर (आरसी! = 0) प्रिंटफ़ ("आरसी =% i \ n", आरसी); नींद (5); } लेकिन कार्यक्रम का उत्पादन
आरएसएस है: शर्त के लिए प्रतीक्षा कर रहा है: स्थिति की प्रतीक्षा करना सही एकल समर्थन आरएसएस: स्थिति की प्रतीक्षा pthread_cond_broadcast (& amp; placeFootCondition) सभी धागे को जागृत नहीं करना चाहिए?
< P> आप यह कर रहे हैं: pthread_cond_wait (& placeFootCondition, & amp; आरएफ); / * पहले धागे आरएफ म्यूटक्स का उपयोग करता है * / Pthread_cond_wait (& amp; placeFootCondition; & amp; एलएफ); / * दूसरा धागा एलएफ म्यूट एक्स का उपयोग करता है * / अलग-अलग म्यूटक्सों का उपयोग करने के बारे में ये कहता है:
जब एक थ्रेड एक शर्त चर पर प्रतीक्षा करता है, तो pthread_cond_timedwait () या pthread_cond_wait () ऑपरेशन, उस गतिशील और हालत चर के बीच एक गतिशील बाइंडिंग का गठन होता है जो कि तब तक प्रभावी रहता है जब तक कि कम से कम एक थ्रेड हालत चर पर अवरुद्ध हो। इस समय के दौरान, किसी भी धागे के प्रयास को उस स्थिति पर वैरिएबल एक अलग म्यूटक्स का उपयोग करने के लिए अपरिभाषित का प्रभाव
नीचे की पंक्ति, प्रत्येक थ्रेड से आपको एक म्यूटिक्स का उपयोग करना चाहिए, जब एक शर्त वैरिएबल पर प्रतीक्षा करते हैं।
Comments
Post a Comment