2013-05-02 9 views
7

में 'अस्थिर' कीवर्ड का उपयोग करने के लिए सर्वोत्तम अभ्यास VS2008 से VS2012 तक हमारे विकास को उन्नत बनाने और वातावरण बनाने के बाद, मैं अपने विरासत कोडेबेस में volatile कीवर्ड का उपयोग करने के प्रभावों के बारे में उलझन में हूं (यह काफी व्यापक है "पुराने" दिनों से धागे के प्रबंधन के लिए प्रतिलिपि पैटर्न)।वीएस2012

आप सी # अस्थिर कीवर्ड से परिचित हैं, या विजुअल C++ के पुराने संस्करणों में अस्थिर के व्यवहार के साथ परिचित हैं, तो ध्यान रखें:

माइक्रोसॉफ्ट VS2012 दस्तावेज में निम्नलिखित टिप्पणी है कि सी ++ 11 आईएसओ मानक अस्थिर कीवर्ड अलग है और /volatile:iso संकलक विकल्प निर्दिष्ट होने पर विजुअल स्टूडियो में समर्थित है। (एआरएम के लिए, यह डिफ़ॉल्ट रूप से निर्दिष्ट है)। अस्थिर सी ++ 11 आईएसओ मानक कोड में कीवर्ड केवल हार्डवेयर पहुंच के लिए उपयोग किया जाना है; इंटर-थ्रेड संचार के लिए इसका इस्तेमाल न करें। इंटर-थ्रेड संचार के लिए, C++ मानक टेम्पलेट लाइब्रेरी से std::atomic<T> जैसे तंत्र का उपयोग करें।

यह कहना है:

जब /volatile:ms संकलक विकल्प का इस्तेमाल किया-द्वारा चूक जाता है जब एआरएम के अलावा अन्य आर्किटेक्चर लक्षित-कर रहे हैं संकलक में अस्थिर वस्तुओं के लिए संदर्भ में आदेश को बनाए रखने के लिए अतिरिक्त कोड उत्पन्न करता है अन्य वैश्विक वस्तुओं के संदर्भ में आदेश जारी रखने के अलावा।

मैं इसका मतलब यह मानता हूं कि हमारा मौजूदा कोड तोड़ नहीं जाएगा लेकिन यह पोर्टेबल नहीं होगा (हमारे लिए कोई समस्या नहीं है)।

  1. हम अपने हमारे कोड में volatile क्वालिफायर का उपयोग करता है को दूर करना चाहिए और साथ सी ++ 11 आईएसओ मानक के अनुरूप बदल देते हैं:

    हालांकि, यह संभव है, इन सवालों, जिस पर मैं कुछ सलाह चाहते हैं उठाना करता है समकक्ष, भले ही हम एमएस से कोड बंद नहीं करेंगे?

  2. अगर हम ऊपर नहीं करते हैं, तो क्या कोई नकारात्मकता है?

मैं सराहना करता हूं कि यह वास्तव में एक विशिष्ट प्रोग्रामिंग समस्या नहीं है लेकिन हम कुछ बड़े रिफैक्टरिंग पर शुरुआत कर रहे हैं और मैं इस काम के लिए कुछ समझदार दिशानिर्देश प्रदान करने में सक्षम होना चाहता हूं।

+1

कृपया इसे ठीक करें। अन्यथा, आपके कुछ सहकर्मियों, बाद में उनके जीवन में, मेरे सहकर्मी बन जाएंगे और मैं उन्हें सिखाना नहीं चाहता हूं कि "अस्थिर! = थ्रेड-सुरक्षित, भले ही आप इसे वर्षों से कर रहे हों"। – screwnut

+0

मैं अपनी पूरी कोशिश करूंगा - लेकिन "बाद में उनके जीवन में" मेरे अधिकांश सहकर्मी मेरे साथ सेवानिवृत्त हो जाएंगे ;-) –

उत्तर

6
  1. यदि आपके पास समय है। लाभ उस महान नहीं हैं - सी ++ 11 परमाणु सटीक नियंत्रण की अनुमति दे सकते हैं कि आपको किस प्रकार की सिंक्रनाइज़ेशन की आवश्यकता है, और अधिक स्पष्ट रूप से परिभाषित अर्थशास्त्र है, जो संकलक को कोड को बेहतर अनुकूलित करने की अनुमति दे सकता है।
  2. सिद्धांत में, लेकिन बहुत ही असंभव, कंपाइलर का भविष्य संस्करण पूरी तरह से एमएस-स्टाइल अस्थिरता के लिए समर्थन छोड़ सकता है। या एक दिन आप वास्तव में एमएस कंपाइलर से दूर पोर्ट करना चाहते हैं, भले ही आप विंडोज पर रहें। यदि आप अब रिफैक्टरिंग कर रहे हैं, तो यह भविष्य में काम करने से आपको बचाने, परमाणुओं के साथ अस्थिरता को बदलने का काम करने का एक अच्छा समय हो सकता है।
+0

धन्यवाद सेबेस्टियन - हम एक ही पंक्तियों के साथ सोच रहे हैं, जो अच्छा है, मैं ' एम सिर्फ सावधान है क्योंकि परमाणुओं का उपयोग करने के लिए 'अस्थिर' बिट्स को दोबारा करने से मुझे आम तौर पर हमारे बहु-थ्रेडिंग कोड की समीक्षा करने के लिए प्रेरित किया जाएगा, इसलिए मैं "रोकने के लिए अच्छी जगह" ढूंढ रहा हूं और इसे देखकर परेशानी कर रहा हूं! सलाह के लिए +1। –

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