पुन: क्रम को रोकने:करता MS-विशिष्ट अस्थिर हार्डवेयर निर्देश <a href="https://msdn.microsoft.com/en-us/library/12a04hfd.aspx" rel="nofollow">documentation</a> से
माइक्रोसॉफ्ट विशिष्ट
जब/अस्थिर: एमएस संकलक विकल्प का इस्तेमाल किया द्वारा डिफ़ॉल्ट जब एआरएम के अलावा अन्य आर्किटेक्चर हैं है लक्षित- संकलक कोड में में अस्थिर वस्तुओं के संदर्भों के बीच क्रम को बनाए रखने के लिए अतिरिक्त कोड उत्पन्न करता है। अन्य वैश्विक ऑब्जेक्ट्स के संदर्भों को ऑर्डर करने के लिए अतिरिक्त। विशेष रूप से:
- एक अस्थिर वस्तु (जिसे अस्थिर लेखन के रूप में भी जाना जाता है) को लिखना रिलीज अर्थशास्त्र है; यानी, वैश्विक या स्थैतिक ऑब्जेक्ट का संदर्भ
जो निर्देश
अनुक्रम में अस्थिर वस्तु को लिखने से पहले होता है संकलन
बाइनरी में उस अस्थिर लेखन से पहले होता है।- एक अस्थिर वस्तु (जिसे अस्थिर पढ़ने के रूप में भी जाना जाता है) का एक पढ़ा गया है अर्थशास्त्र प्राप्त करें; यानी, एक वैश्विक या स्थैतिक वस्तु
का संदर्भ जो निर्देश
अनुक्रम में अस्थिर स्मृति के पढ़ने के बाद होता है, संकलित बाइनरी में उस अस्थिर पढ़ने के बाद होता है।यह अस्थिर वस्तुओं को स्मृति ताले के लिए उपयोग करने में सक्षम बनाता है और को बहुप्रचारित अनुप्रयोगों में रिलीज़ करता है।
यह निश्चित रूप से गारंटी देता है कि volatile
पुन: क्रम संकलन समय निर्देश करने से रोकता है संकलक (क्योंकि यह स्पष्ट रूप से कहा कि शिक्षा अनुक्रम में एक ही संकलित बाइनरी में हो जाएगा)।
लेकिन जैसा कि हम सभी जानते हैं, हार्डवेयर रीडरिंग जैसी चीज भी है (जैसे सीपीयू अपनी इच्छानुसार निर्देशों को पुन: व्यवस्थित करने में सक्षम है)। volatile
इसे भी रोकता है? मुझे पता है कि सिंक्रनाइज़ेशन प्राइमेटिव्स (जैसे म्यूटेक्स) करते हैं, लेकिन एमएस-विशिष्ट volatile
के बारे में क्या?
"एआरएम के अलावा आर्किटेक्चर" द्वारा, एमएस का अर्थ x86 और x64 है। X86 और x64 पर, लोड को अन्य लोड के साथ पुन: व्यवस्थित नहीं किया जाता है। और दुकानों को अन्य दुकानों के साथ आदेश नहीं दिया जाता है। (गैर-अस्थायी स्टोर जैसे कुछ अपवादों के साथ) IOW, जब तक कि संकलक कुछ भी पुन: व्यवस्थित नहीं करता है, न ही प्रोसेसर होगा। ऐसा लगता है कि एमएस के लिए '/ अस्थिर '' std :: परमाणु' की कार्यक्षमता प्रदान करने का प्रयास कर रहा है जो सी ++ 11 तक अस्तित्व में नहीं था। – Mysticial
इसके अलावा, वे कहते हैं "रिलीज सेमेन्टिक्स है", इसलिए दस्तावेज निश्चित रूप से * दावे * 'अस्थिर 'सीपीयू रीडरिंग को रोकता है। –
@ मैस्टिसियल "ऐसा लगता है कि एमएस के लिए अस्थिर std :: परमाणु की कार्यक्षमता प्रदान करने की कोशिश कर रहा है" - नहीं, ऐसा नहीं है। उदाहरण के लिए, यह गारंटी नहीं है कि 'अस्थिर' चरों को पढ़ने और लिखने के संचालन परमाणु हैं। वास्तव में, वे हैं - क्योंकि x86 1-बाइट चर के लिए पढ़ने और लिखने के संचालन की परमाणुता की गारंटी देता है, लेकिन एमएसडीएन में 'volatile' – FrozenHeart