2010-08-24 5 views
5

बस आश्चर्य हुआ कि उपर्युक्त सत्य है या क्या संदर्भ असाइनमेंट दो परिचालनों में विभाजित हैंसंदर्भ असाइनमेंट वास्तव में परमाणु हैं - यहां तक ​​कि 64 बिट मशीन पर भी?

क्या आपको Interlocked.Exchange का उपयोग करने की आवश्यकता है?

क्या कोई पुष्टि कर सकता है?

मैं यहां सूचक असाइनमेंट के बारे में बात कर रहा हूं - क्या यह वास्तव में परमाणु है?

उत्तर

5

यह इस प्रकार पर निर्भर करता है। उदाहरण के लिए Int64 असाइनमेंट x86 मोड में परमाणु नहीं हैं और x64 मोड में परमाणु हैं। string असाइन करना परमाणु है क्योंकि यह संदर्भ प्रकार है और आप पॉइंटर असाइन कर रहे हैं और पॉइंटर का आकार या तो x या x64 बिट मोड पर चल रहे हैं या नहीं, इसके आधार पर 4 या 8 बाइट्स का आकार है।

+0

क्या आप इसके बारे में निश्चित हैं - यदि हम 64 बिट मशीन पर चलते हैं तो पॉइंटर 8 बाइट्स है - क्या यह वास्तव में परमाणु है? –

+0

हां 'IntPtr.Size' संपत्ति चेकआउट करें: http://msdn.microsoft.com/en-us/library/system.intptr.size.aspx लेकिन ओएस मोड द्वारा भ्रमित न हों। यदि आप संकलन के दौरान स्पष्ट रूप से निर्दिष्ट करते हैं तो आप 64 बिट ओएस चला सकते हैं और अभी भी अपने .NET अनुप्रयोग को x86 मोड में चला सकते हैं। –

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