सी ++ 11 बिना घटना अधिसूचना std :: condition_variable है, इसकी प्रतीक्षा समारोहम्युटेक्स
template< class Predicate >
void wait(std::unique_lock<std::mutex>& lock, Predicate pred);
यह एक म्युटेक्स की आवश्यकता है।
जहां तक मैं समझता हूँ - अपने notify_one तुल्यकालन बिना कहा जा सकता है (मैं जानता हूँ कि मुहावरेदार तरह से एक म्युटेक्स के साथ उपयोग करने के लिए है)। इसलिए मैंने इसे बचाने के लिए एक म्युटेक्स जरूरत नहीं है -
मैं एक वस्तु जो पहले से ही आंतरिक रूप से सिंक्रनाइज़ है। एक धागे को उस वस्तु से जुड़े कुछ घटनाओं के लिए इंतजार करना चाहिए, और अन्य को अधिसूचित किया जाएगा।
कैसे सी ++ 11 में एक म्युटेक्स के बिना इस तरह अधिसूचना करना है? अर्थात। एक condition_variable के साथ करना आसान है, लेकिन इसे एक म्यूटेक्स की आवश्यकता है। मैंने नकली म्यूटेक्स प्रकार का उपयोग करने के बारे में सोचा, लेकिन std :: mutex प्रतीक्षा इंटरफ़ेस में खींचा गया है।
एक विकल्प एक std :: atomic_flag + नींद मतदान पर है, लेकिन मैं सो पसंद नहीं है।
है कि मैं वास्तव में क्या देख रहा हूँ, मैं इसके बारे में पता नहीं था। धन्यवाद! – qble
"ऐसा लगता है कि यह एक सादा std :: condition_variable एक साथ एक एसटीडी के साथ shared_ptr एक std :: म्युटेक्स का उपयोग करता है ::, इसलिए वहाँ निश्चित रूप से कुछ भूमि के ऊपर किसी भी गहन जानकारी के बिना शामिल है।" - दिलचस्प, क्या यह ** notify_one ** के भीतर आंतरिक म्यूटेक्स को लॉक करता है? क्या सादे std :: condition_variable के बारे में - यह ** notify_one के साथ किसी भी म्युटेक्स ताले करता **? – qble
"उस की बात है मैं शायद अपने मामले नया स्वरूप इतना है कि तुल्यकालन वास्तव में केवल एक म्युटेक्स एक सादे हालत चर की रक्षा करने द्वारा किया जाता है की सिफारिश करेंगे।"- मुझे notify_one की रक्षा करने की आवश्यकता नहीं है। मुझे म्यूटेक्स की आवश्यकता क्यों है, जिसका उपयोग केवल एक थ्रेड के भीतर किया जा सकता है? – qble