मैं पठार सीख रहा हूं और शर्तों की प्रतीक्षा कर रहा हूं। जहाँ तक मेरा बता सकते हैं एक ठेठ प्रतीक्षा धागा इस तरह है:पर्थ्रेड और प्रतीक्षा की शर्तें
pthread_mutex_lock(&m);
while(!condition)
pthread_cond_wait(&cond, &m);
// Thread stuff here
pthread_mutex_unlock(&m);
क्या मैं नहीं समझ सकता है क्यों लाइन while(!condition)
आवश्यक है भले ही मैं pthread_cond_signal()
का उपयोग धागा को जगाने के लिए।
मैं समझ सकता है कि मैं स्थिति का परीक्षण करने की जरूरत है अगर मैं pthread_cond_broadcast()
का उपयोग करें, क्योंकि मैं जगा सभी इंतजार कर धागे और उनमें से एक म्युटेक्स अनलॉक (और इस प्रकार निष्पादन स्थानांतरित एक और ऊपर waked करने से पहले फिर से हालत झूठी कर सकते हैं थ्रेड जो उस बिंदु पर निष्पादित नहीं होना चाहिए)। लेकिन अगर मैं pthread_cond_signal()
का उपयोग करता हूं तो मैं केवल एक थ्रेड उठता हूं इसलिए स्थिति सत्य होनी चाहिए। तो कोड इस तरह दिख सकता है:
pthread_mutex_lock(&m);
pthread_cond_wait(&cond, &m);
// Thread stuff here
pthread_mutex_unlock(&m);
मैंने ऐसा होने वाले नकली संकेतों के बारे में कुछ पढ़ा। क्या यह (और केवल यही) कारण है? मुझे नकली सिंगल क्यों होना चाहिए? या मुझे कुछ और नहीं मिला है?
मुझे लगता है संकेत कोड इस तरह है:
pthread_mutex_lock(&m);
condition = true;
pthread_cond_signal(&cond); // Should wake up *one* thread
pthread_mutex_unlock(&m);
बिल्कुल। ऊपर से मतदान किया। इसे स्वीकार किए गए उत्तर से अधिक ध्यान देना चाहिए। –