निम्नलिखित स्थिति पर विचार करें।प्रतीक्षा (इसे POSIX सूत्र, C++)
यह बिल्कुल ठीक है (और वांछित) कि बार() समानांतर में कई बार निष्पादित किया जाता है, क्योंकि यह कभी भी foo की स्थिति को नहीं बदलता है।
समस्या उत्पन्न होती है जब मुझे बाहर से foo की स्थिति को बदलने की आवश्यकता होती है (किसी अन्य थ्रेड से, "कार्यकर्ता" धागे में से किसी एक से नहीं) - मैं एक तरह से foo कैसे लॉक कर सकता हूं ताकि कॉलिंग थ्रेड ब्लॉक हो जाए आखिरी कार्यकर्ता धागा बार() के साथ किया जाता है और सभी कार्यकर्ता धागे बार() पर अवरुद्ध हो जाएंगे जब तक कि मैं फिर से foo जारी नहीं करता?
स्पष्ट रूप से मैं केवल एक म्यूटेक्स का उपयोग नहीं कर सकता जो कि बार() के निष्पादन के दौरान बंद रहता है, क्योंकि तब मुझे वहां समरूपता नहीं होगी।
कोई विचार? या क्या उन प्रकार की समस्याओं के लिए एक बेहतर डिजाइन है?
देखें [पाठक-लेखक लॉक] (http://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock) – hmjd
बार फ़ंक्शन के कॉलिंग के आसपास कार्यकर्ता धागे में एक म्यूटेक्स क्यों नहीं पेश करना कॉलिंग थ्रेड पर भी जो फूओस राज्य को बदलना चाहता है। कॉलिंग थ्रेड म्यूटेक्स को लॉक करता है और सुरक्षित रूप से फू के राज्य को बदल सकता है। – mgr
'pthread_rwlock_t' आपके लिए ब्याज का हो सकता है। – WhozCraig