मुझे लगता है कि विजुअल स्टूडियो 2013 में std::mutex
कार्यान्वयन बहुत धीमा है। यह एक भारी वजन म्यूटेक्स का उपयोग करता है यह सुनिश्चित करने के लिए कि सिंक्रनाइज़ेशन को उन प्रक्रियाओं के बीच भी हासिल किया जा सकता है जो सभी ठीक और बेवकूफ हैं; जब तक आप अन्य प्रक्रियाओं से बात नहीं कर रहे हैं और वास्तव में उस अतिरिक्त गति का उपयोग कर सकते हैं जो CRITICAL_SECTION
Win32 पर स्पिन-लॉक ऑफ़र के साथ है।क्या std :: condition_variable द्वारा उपयोग के लिए सी ++ 11 म्यूटेक्स अवधारणा को कार्यान्वित करना संभव है?
मैंने fast_recursive_mutex
को लागू करने का प्रयास किया जो सी ++ 11 म्यूटेक्स अवधारणा का पालन करता है और यह spec के अनुसार सभी दायित्वों को पूरा करता है। सभी इंद्रियों में, जब तक आप प्रक्रियाओं के बीच सिंक्रनाइज़ नहीं कर रहे हैं, तब तक std::mutex
के लिए यह एक ड्रॉप-इन प्रतिस्थापन है।
यह std::lock_guard
और std::unique_lock
के साथ बढ़िया काम करता है। हालांकि std::condition_variable
के साथ इसका उपयोग करने का प्रयास करते समय मुझे समस्याएं आती हैं क्योंकि std::condition_variable::wait(std::unique_lock<std::mutex>&)
को std::mutex
के हार्ड कोड किए गए उपयोग के कारण स्वीकार नहीं करता है।
तो मेरी प्रश्न हैं:
- क्यों
wait()
std::mutex
से एक और म्युटेक्स प्रकार स्वीकार नहीं करता है? - क्या मैं इसके बारे में कुछ कर सकता हूं? (पुन: कार्यान्वयन की स्थिति को कम करने योग्य _ariable)।
"यह एक और प्रकार क्यों स्वीकार नहीं करता है" का पहला सवाल है, आप यह भी पूछ सकते हैं कि उन्होंने दो अलग-अलग 'condition_variable' कक्षाएं क्यों लिखीं और न केवल एक प्रकार के टेम्पलेट म्यूटेक्स प्रकार के साथ। – CashCow