2012-01-23 6 views
10

मुझे समझ में समस्या है कि क्यों साझा_ptr परमाणु cpu निर्देशों का उपयोग कर रहा है ... मैं कारणों को समझ नहीं सकता क्योंकि यह थ्रेड सुरक्षित नहीं है। क्या कोई कृपया समझा सकता है।stom :: shared_ptr atomic cpu संचालन का उपयोग क्यों कर रहा है

यदि आपको आश्चर्य है कि मुझे पता है कि यह परमाणु अंतर्दृष्टि का उपयोग कैसे करता है: सी ++ से एक क्लिप था और इसके बाद हर्ब और आंद्रेई इसके बारे में बात करते थे, लेकिन उन्होंने कभी भी इसका कारण क्यों नहीं बताया।

उत्तर

15

shared_ptr का कोई भी उदाहरण बहु-थ्रेड सुरक्षित है। जो डेटा इंगित करता है वह मल्टी-थ्रेड सुरक्षित नहीं है। this देखें।

परमाणु निर्देश, अगर सही ढंग से लागू होते हैं (प्रतिस्पर्धी थ्रेड पहुंच द्वारा उसी क्रम में सुरक्षा) थ्रेड सुरक्षा को लागू करने का एक तरीका है। एक और तरीका म्यूटेक्स के उपयोग से है।

बूस्ट के लिए एक समान प्रश्न देखें: Is boost shared_ptr xxx thread safe?

+6

अधिक विशिष्ट होने के लिए: 'shared_ptr' के अंदर साझा संदर्भ गणना एकाधिक धागे द्वारा उपयोग की जा सकती है। यही कारण है कि यह परमाणु रूप से वृद्धि/कमी करना आवश्यक है। –

2

हर्ब Sutter सिर्फ उसके gotw 95 में एक अच्छा उदाहरण के रूप में shared_ptr इस्तेमाल किया, वह वहाँ से चला जाता है डिज़ाइन निर्णय पर विस्तार से बता रहे हैं:
https://herbsutter.com/2014/01/13/gotw-95-solution-thread-safety-and-synchronization/

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। (और मैं नौकरी करने के लिए बहुत आलसी हूँ) – johnchen902

संबंधित मुद्दे