मैंने थ्रेड-सुरक्षित डबल चेक लॉकिंग (सिंगलेट्स या आलसी init के लिए) पर विचार करने के कई प्रश्न पढ़े हैं। कुछ धागे में, जवाब यह है कि पैटर्न पूरी तरह टूटा हुआ है, अन्य समाधान का सुझाव देते हैं।सी ++ 11: आलसी प्रारंभिक के लिए सुरक्षित डबल चेक लॉकिंग। मुमकिन?
तो मेरा सवाल है: क्या सी ++ में पूरी तरह से थ्रेड-सुरक्षित डबल चेक किए गए लॉकिंग पैटर्न को लिखने का कोई तरीका है? यदि हां, तो यह कैसा दिखता है।
हम सी ++ 11 मान सकते हैं, अगर इससे चीज़ें आसान हो जाती हैं। जहां तक मुझे पता है, सी ++ 11 मेमोरी मॉडल में सुधार हुआ है जो आवश्यक सुधारों को उत्पन्न कर सकता है।
मुझे पता है कि डबल-चेक संरक्षित परिवर्तनीय अस्थिर बनाकर जावा में यह संभव है। चूंकि सी ++ 11 ने जावा के एक से मेमोरी मॉडल के बड़े हिस्से उधार लिया, इसलिए मुझे लगता है कि यह संभव हो सकता है, लेकिन कैसे?
आप सी ++ 11 का उपयोग कर सकते हैं, बस की अनदेखी पूरे डबल व्यापार ताला लगा चेक किया था और या तो स्थिर स्थानीय चर या 'std :: call_once' का उपयोग करें। –
स्थिर स्थानीय लोग आलसी शुरू कर रहे हैं? और 'call_once' के बारे में: यह कैसे सुनिश्चित करता है कि कॉल एक बार चर के पूर्ण रूप से निर्मित संदर्भ नहीं लिखेगा? – gexicide
हां, स्थैतिक स्थानीय लोगों को थ्रेड-सुरक्षित तरीके से आलसी शुरू किया जाता है। और 'call_once' यह सुनिश्चित करता है कि विषय केवल एक बार ही कहा जाता है; और वास्तव में फ़ंक्शन रिटर्न निष्पादित करने वाले व्यक्ति के सामने 'call_once' रिटर्न' के लिए कोई अन्य कॉल नहीं है (आप यहां http://en.cppreference.com/w/cpp/thread/call_once पढ़ सकते हैं)। यह कार्यान्वयन पर निर्भर करता है। ये दो चीजें मूल रूप से मौजूद हैं इसलिए आप अधिक
बगडबल-चेक लॉकिंग कार्यान्वयन के साथ परेशान नहीं करना चाहते हैं। –