मुझे आश्चर्य है कि क्यों मैं इस में सी ++ 14 (या 17) ऐसा नहीं कर सकतेस्थिति चर और साझा म्युटेक्स
std::shared_timed_mutex mutex;
std::unique_lock<std::shared_timed_mutex> lock(mutex);
std::condition_variable var;
while(!some_condition)
var.wait(lock);
स्थिति चर केवल std :: म्युटेक्स के साथ काम करने लगते हैं। पर क्यों?
क्या आप इसके लिए अपना उपयोगकेस साझा कर सकते हैं? – inf
इस बारे में अच्छा क्या है कि आप न केवल 'shared_timed_mutex' पर प्रतीक्षा कर सकते हैं जो ऊपर दिखाए गए "लिखने के लिए" लिखा गया है, आप' shared_lock' का उपयोग कर "लॉक पढ़ा" होने पर भी प्रतीक्षा कर सकते हैं। हो सकता है कि आपको तब तक इंतजार करना पड़े जब तक एक लेखक थ्रेड जानकारी अपडेट नहीं करता है ताकि आप इसे प्रकाशित कर सकें। –
केस का उपयोग थोड़ा जटिल है: मेरे पास एक वैश्विक (अब के लिए) पढ़ने/लिखने के लॉक के साथ डेटास्टोर है। और प्रति वस्तु ताले भी। यदि मैं किसी ऑब्जेक्ट को प्राप्त करता हूं तो मैं पहले वैश्विक लॉक को लॉक करता हूं, ऑब्जेक्ट पुनर्प्राप्त करता हूं, ऑब्जेक्ट लॉक करता हूं, और फिर वैश्विक लॉक जारी करता हूं। अब ऐसा मामला हो सकता है जहां कोई वस्तु हटा दी जाए। तो मैं ऑब्जेक्ट लॉक पर इंतजार नहीं करना चाहता (क्योंकि वह ताला भी नष्ट हो जाएगा) लेकिन इसके बजाय एक शर्त चर है जो कुछ बदलते समय थके हुए थ्रेड उठता है। शायद सबसे अच्छा डिज़ाइन नहीं है लेकिन यह डेडलॉक्स से मुक्त है और अधिक मेमोरी का उपयोग नहीं करता है। –