मैं समझता हूँ कि आदिम प्रकार के लिए, अस्थिर एक और धागा तुरंत
आपको कम से कम तीन तरीकों से गलत तरीके से समझने के मान से बदलाव को प्रतिबिंबित कर सकते हैं। आपको कमजोर स्मृति मॉडल के बारे में सब कुछ गहराई से समझने तक, अस्थिरता का उपयोग करने का प्रयास नहीं करना चाहिए, और वे आपके कार्यक्रम को कैसे प्रभावित करते हैं, और वे आपके कार्यक्रम को कैसे प्रभावित करते हैं।
पहले, स्पष्ट रहें कि अस्थिर चर, नहीं मूल्यों प्रभावित करता है।
दूसरा, अस्थिर चर उन तत्वों को प्रभावित नहीं करता है जिनमें मान प्रकारों के मान अलग-अलग होते हैं, इससे भिन्नताएं होती हैं जिनमें संदर्भ होते हैं।
तीसरा, अस्थिरता का मतलब यह नहीं है कि अन्य धागे से मूल्य परिवर्तन तुरंत दिखाई दे रहे हैं। अस्थिरता का मतलब है कि चर प्राप्त करते हैं और semantics जारी करते हैं। अस्थिर को उस क्रम में प्रभावित करता है जिसमें स्मृति उत्परिवर्तन के साइड इफेक्ट्स को किसी विशेष थ्रेड से होने के लिए देखा जा सकता है।विचार है कि उत्परिवर्तनों का निरंतर सार्वभौमिक क्रम मौजूद है और यह कि उस क्रम में उन उत्परिवर्तनों को तुरंत सभी धागे से देखा जा सकता है, स्मृति मॉडल द्वारा गारंटी नहीं है।
हालांकि, वस्तु की सामग्री के बारे में?
क्या इसके बारे में? संदर्भ प्रकार के अस्थिर चर द्वारा संदर्भित भंडारण स्थान में कोई विशेष थ्रेडिंग विशेषताओं की आवश्यकता नहीं है।
यदि एक थ्रेड फ़ंक्शन AddValue को कॉल करता है, तो सूची का पता नहीं बदलता है, क्या कोई अन्य थ्रेड सूची के "सामग्री" परिवर्तन के बारे में अपडेट हो जाएगा।
नहीं। यह क्यों होगा वह अन्य थ्रेड एक अलग प्रोसेसर पर हो सकता है, और प्रोसेसर कैश ने उस पृष्ठ को प्री-लोड किया हो सकता है जिसमें सूची का समर्थन करने वाले सरणी का पता शामिल है। सूची को म्यूट करने से भंडारण स्थान बदल गया हो सकता है जिसमें कुछ पूरी तरह से अलग स्थान को संदर्भित करने के लिए सरणी का पता होता है।
बेशक
, सूची वर्ग पहली जगह में threadsafe नहीं है। यदि आप सूची में पहुंच लॉक नहीं कर रहे हैं तो सूची करने पर आप आसानी से क्रैश और मर सकते हैं।
आप अस्थिर जरूरत नहीं है, सूची में पहुंच के आसपास थ्रेड लॉक डालने के लिए आपको क्या चाहिए। चूंकि थ्रेड लॉक पूर्ण बाड़ उत्पन्न करते हैं, इसलिए आपको अस्थिर द्वारा पेश की गई आधा बाड़ की आवश्यकता नहीं होनी चाहिए। और क्या अस्थिर वास्तव में करता है के बारे में एक अच्छा स्पष्टीकरण इससे कैसे प्रभावित क्षेत्रों के लिए http://www.albahari.com/threading/part4.aspx#_The_volatile_keyword पर
मुझे इस बारे में निश्चित नहीं है, लेकिन मेरा अनुमान है कि यह सूची वास्तव में केवल एक सूचक (पता) है, जब सामग्री अपडेट हो जाती है तो यह तुरंत हर जगह परिलक्षित होता है, क्योंकि सामग्री ढेर में रहती है, हालांकि, एड्रेस-चेंज स्टैक बदल गया है, और मुझे लगता है कि एक कोर पर रह सकता है। लेकिन, जैसा कि कहा, कोई विशेषज्ञ नहीं है। यह केवल एक अनुमान है। – Alxandr
इसके अलावा, एक साइड-नोट के रूप में। बहुत सारे अनुकूलन के अस्थिर मोड़। अनुकूलन का एक बहुत कुछ। कुछ लोगों द्वारा अस्थिर संशोधकों का उपयोग न करने की दृढ़ता से अनुशंसा की जाती है, बल्कि आवश्यक होने पर अस्थिर और वाष्पशीलता का उपयोग करें (सिस्टम नामस्थान में कक्षा पर पाए जाने वाले कुछ वैश्विक स्थैतिक विधि, शायद Google पर पाए जा सकते हैं)। – Alxandr
@Axxandr: सावधान रहें। अस्थिर पढ़ने और अस्थिर लेखन संभावित रूप से महंगी विधियों को कॉल करने के लिए हैं और वे * पूर्ण बाड़ * प्रेरित करते हैं, आधे बाड़ की उम्मीद नहीं होगी। यदि आप प्रदर्शन कारणों से लॉक-फ्री कोड लिख रहे हैं (और आपको यह पागल चीज़ क्या करना है?) यह पूरी तरह से संभव है कि वोल्टाइल रीड और वोल्टाइलवाइट खराब हो। आपको इसे सावधानी से प्रोफाइल करना होगा। –