मैं हमारे codebase में आज कुछ सिंगलटन कोड में पड़ गए और मैं अगर निम्नलिखित धागे की सुरक्षित था यकीन नहीं था:सी के Atomicity # वालों ऑपरेटर
if (_sentence != null) {
return _sentence;
}
else {
return (_sentence = new Sentence());
}
:
public static IContentStructure Sentence{
get {
return _sentence ?? (_sentence = new Sentence());
}
}
इस बयान के बराबर है
मुझे विश्वास है कि ?? सिर्फ एक कंपाइलर चाल है और परिणामस्वरूप कोड अभी भी परमाणु नहीं है। दूसरे शब्दों में, दो या अधिक धागे को एक नई वाक्य में _sentence सेट करने और इसे वापस करने से पहले शून्य होने के लिए शून्य हो सकता है। सब सही है कि है
public static IContentStructure Sentence{
get {
lock (_sentence) { return _sentence ?? (_sentence = new Sentence()); }
}
}
:
atomicity की गारंटी के लिए, हम कोड की कि बिट लॉक करने के लिए होगा?
http://csharpindepth.com/Articles/General/Singleton.aspx – SLaks
सिवाय इसके कि आप शून्य पर कुछ लॉक नहीं कर सकते हैं, इसलिए आपका समाधान कभी काम नहीं करेगा। – vcsjones
अच्छा बिंदु। हाँ आपको लॉक करने के लिए एक और ऑब्जेक्ट बनाना होगा। अच्छी पकड़। – Adam