में 'अस्थिर' कीवर्ड का उपयोग करने के लिए सर्वोत्तम अभ्यास VS2008 से VS2012 तक हमारे विकास को उन्नत बनाने और वातावरण बनाने के बाद, मैं अपने विरासत कोडेबेस में volatile
कीवर्ड का उपयोग करने के प्रभावों के बारे में उलझन में हूं (यह काफी व्यापक है "पुराने" दिनों से धागे के प्रबंधन के लिए प्रतिलिपि पैटर्न)।वीएस2012
आप सी # अस्थिर कीवर्ड से परिचित हैं, या विजुअल C++ के पुराने संस्करणों में अस्थिर के व्यवहार के साथ परिचित हैं, तो ध्यान रखें:
माइक्रोसॉफ्ट VS2012 दस्तावेज में निम्नलिखित टिप्पणी है कि सी ++ 11 आईएसओ मानक अस्थिर कीवर्ड अलग है और
/volatile:iso
संकलक विकल्प निर्दिष्ट होने पर विजुअल स्टूडियो में समर्थित है। (एआरएम के लिए, यह डिफ़ॉल्ट रूप से निर्दिष्ट है)। अस्थिर सी ++ 11 आईएसओ मानक कोड में कीवर्ड केवल हार्डवेयर पहुंच के लिए उपयोग किया जाना है; इंटर-थ्रेड संचार के लिए इसका इस्तेमाल न करें। इंटर-थ्रेड संचार के लिए, C++ मानक टेम्पलेट लाइब्रेरी सेstd::atomic<T>
जैसे तंत्र का उपयोग करें।
यह कहना है:
जब
/volatile:ms
संकलक विकल्प का इस्तेमाल किया-द्वारा चूक जाता है जब एआरएम के अलावा अन्य आर्किटेक्चर लक्षित-कर रहे हैं संकलक में अस्थिर वस्तुओं के लिए संदर्भ में आदेश को बनाए रखने के लिए अतिरिक्त कोड उत्पन्न करता है अन्य वैश्विक वस्तुओं के संदर्भ में आदेश जारी रखने के अलावा।
मैं इसका मतलब यह मानता हूं कि हमारा मौजूदा कोड तोड़ नहीं जाएगा लेकिन यह पोर्टेबल नहीं होगा (हमारे लिए कोई समस्या नहीं है)।
- हम अपने हमारे कोड में
volatile
क्वालिफायर का उपयोग करता है को दूर करना चाहिए और साथ सी ++ 11 आईएसओ मानक के अनुरूप बदल देते हैं:हालांकि, यह संभव है, इन सवालों, जिस पर मैं कुछ सलाह चाहते हैं उठाना करता है समकक्ष, भले ही हम एमएस से कोड बंद नहीं करेंगे?
- अगर हम ऊपर नहीं करते हैं, तो क्या कोई नकारात्मकता है?
मैं सराहना करता हूं कि यह वास्तव में एक विशिष्ट प्रोग्रामिंग समस्या नहीं है लेकिन हम कुछ बड़े रिफैक्टरिंग पर शुरुआत कर रहे हैं और मैं इस काम के लिए कुछ समझदार दिशानिर्देश प्रदान करने में सक्षम होना चाहता हूं।
कृपया इसे ठीक करें। अन्यथा, आपके कुछ सहकर्मियों, बाद में उनके जीवन में, मेरे सहकर्मी बन जाएंगे और मैं उन्हें सिखाना नहीं चाहता हूं कि "अस्थिर! = थ्रेड-सुरक्षित, भले ही आप इसे वर्षों से कर रहे हों"। – screwnut
मैं अपनी पूरी कोशिश करूंगा - लेकिन "बाद में उनके जीवन में" मेरे अधिकांश सहकर्मी मेरे साथ सेवानिवृत्त हो जाएंगे ;-) –