मुझे पता है कि .NET में सभी 32-बिट प्रकार (उदाहरण के लिए, int
, bool
, आदि) थ्रेड सुरक्षित हैं। यही है, आंशिक लेखन नहीं होगा (विनिर्देशों के अनुसार)।int है? सुरक्षित धागा?
लेकिन, क्या यह int?
(शून्य रहित int) के लिए भी लागू होता है?
मुझे पता है कि .NET में सभी 32-बिट प्रकार (उदाहरण के लिए, int
, bool
, आदि) थ्रेड सुरक्षित हैं। यही है, आंशिक लेखन नहीं होगा (विनिर्देशों के अनुसार)।int है? सुरक्षित धागा?
लेकिन, क्या यह int?
(शून्य रहित int) के लिए भी लागू होता है?
प्रश्न खराब शब्दों में है, और इसलिए अब तक जवाब में भ्रम है। सवाल होना चाहिए "टाइप int के एक चर के लिए पढ़ और लिखते हैं? परमाणु होने की गारंटी है?"
नहीं, बिल्कुल नहीं। कल्पना इस मुद्दे पर बेहद स्पष्ट है:
पढ़ता है और निम्न डेटा प्रकारों के बारे में लिखते परमाणु कर रहे हैं: bool, चार, बाइट, sbyte, लघु, ushort, uint, int, नाव, और संदर्भ प्रकार के। इसके अलावा, पिछली सूची में अंतर्निहित प्रकार के साथ enum प्रकारों के पढ़ने और लिखने पर भी परमाणु हैं। लंबे, उलझन, डबल, और दशमलव, साथ ही उपयोगकर्ता द्वारा परिभाषित प्रकार सहित अन्य प्रकार के पढ़ और लिखते हैं, परमाणु होने की गारंटी नहीं है।
थ्रेड के लिए यह पूरी तरह से संभव है कि नालीबल प्रकार के साझा-मेमोरी चर से आंशिक रूप से लिखित मान पढ़ा जाए।
उदाहरण के लिए, मान लीजिए कि आपके पास int है? परिवर्तनीय एक्स जो वर्तमान में मूल्य शून्य है। इसलिए इसमें एक int, शून्य पर सेट होता है, और एक बूल, गलत पर सेट होता है। अब एक और धागे पर आप शून्य के लिए शून्य "int" लिखते हैं। यह किसी अन्य थ्रेड के लिए x से गैर-शून्य से int शून्य को पढ़ने के लिए पूरी तरह से कानूनी है, क्योंकि 5 में int "सेट" सेट को सेट करने से पहले सेट किया जा सकता है।
नहीं है, के बाद से एक int?
वास्तव में एक struct (Nullable<int>
) एक int
और एक bool
से बना है।
@Eric: लेकिन, रूपांतरण ऑपरेटरों को छोड़कर, 'न्यूबल योग्य
@LukeH: इस सवाल के साथ क्या करना है? –
@Eric: मेरी टिप्पणी किसी अन्य एरिक द्वारा बनाई गई एक पूर्व टिप्पणी (हटाए जाने के बाद) के जवाब में थी, दावा करते हुए कि 'int?' प्रकार के कुछ सदस्य - सार्वजनिक स्थिर सदस्य - थ्रेड-सुरक्षित थे। – LukeH
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx से:
किसी भी सार्वजनिक स्थिर इस प्रकार के सदस्यों (विजुअल बेसिक में साझा) धागा सुरक्षित हैं। कोई भी इंस्टेंस सदस्यों को थ्रेड सुरक्षित होने की गारंटी नहीं है।
समस्या यह है कि 'Nullable
क्या तथ्य यह है कि यह सामान्य दस्तावेज प्रतिलिपि है इसे कम सटीक बनाते हैं? –
.. कम से कम कम से कम :) – Rusty
मैं int के लिए आपका उदाहरण समझता हूं? .. लेकिन लंबे, डबल और दशमलव परमाणु नहीं पढ़ते/लिखते हैं क्यों? – MalcomTucker
@ माल्कॉम टकर: 32 बिट प्रोसेसर केवल गारंटी देता है कि चर पर ऑपरेशन 32 बिट्स पर परमाणु हैं। लंबे, डबल और दशमलव को पूरे मान को लिखने या पढ़ने के लिए एक से अधिक ऑपरेशन की आवश्यकता हो सकती है क्योंकि वे 32 बिट्स से बड़े होते हैं। –
@ मैल्कम टकर: http://msdn.microsoft.com/en-us/library/system.threading.interlocked_members.aspx युगल और अन्य प्रकारों पर परमाणु संचालन करने की क्षमता प्रदान करने की कार्यक्षमता प्रदान करता है। – Brian