Tuesday 15 June 2010

c++ - Is it useful to mark variables as volatile if they are shared across threads? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 3 जवाब

सूचना!

मैं स्पष्ट रूप से यहाँ हर किसी के लिए मेरी बात स्पष्ट रूप से नहीं कर रहा हूँ, और यह अविश्वसनीय निराशाजनक है मेरा लक्ष्य इस मिथक को दूर करना था कि अस्थिर प्रभावी रूप से एक नो-ऑप है, यह कुछ भी नहीं करता है मैं यह कहने की कोशिश नहीं कर रहा था कि इसका उपयोग करना चाहिए, यह जरूरी है, कि यह बेमानी नहीं है, आदि।

मैंने यह दिखाया है कि अस्थिर अभी भी कुछ काम करता है मैं स्वीकार करता हूं कि यह कुछ परिस्थितियों में बेमानी है, और यह कि बहु-थ्रेडेड उदाहरण एक खराब विकल्प था।

मैं इस तथ्य को छिपाने की भी कोशिश नहीं कर रहा हूं कि मेरे उत्तर के शुरुआती संशोधन में त्रुटियां होती हैं लेकिन यह क्यू एंड ए भी अपने इच्छित उद्देश्य को पूरा करने के करीब नहीं आ रही है उस समय तक, मुझे लगता है कि इसे चक चकने का समय है।

केरेक और टीसी के लिए धन्यवाद अपनी अंतर्दृष्टि के लिए मुझे नहीं लगता कि उनकी प्रतिक्रिया उन प्रश्नों को ठीक करती है जो मैं पूछना चाहता था। मुझे यकीन है कि यह मेरी गलती करने के लिए मेरी गलती है।

इसलिए मैं इसे छोड़ रहा हूँ! और इसे इस सवाल का डुप्लिकेट के रूप में बंद कर दिया कि इसका इरादा नहीं था, लेकिन इसका अर्थ इस रूप में किया गया है।

चीयर्स! (& Amp; hth।)

मैं एक धागा में एक चर में लिख रहा हूँ और इसे पढ़ने से दूसरे में। मुझे बताया गया है कि अस्थिर इस के लिए पूरी तरह से बेकार है और मुझे इस दिन और उम्र में इसका उपयोग करने की आवश्यकता नहीं है जब तक कि मैं हार्डवेयर के साथ काम नहीं कर रहा हूं।

  int X = 0; रहित थ्रेड 1 () {जबकि (सच) {नींद (1); यदि (एक्स & gt; 0) तोड़; }} शून्य धागा 2 () {जबकि (सच) {नींद (1); एक्स ++; }}  

क्या मैं इस मामले में अस्थिर का उपयोग करके कुछ भी हासिल कर सकता हूँ?
और कैसे अगर x एक सरल नहीं है int लेकिन एक वर्ग का प्रकार?

आपको सही बताया गया है, अस्थिर इंटर-थ्रेड कम्युनिकेशन के लिए उपयोगी नहीं है उस प्रयोजन के लिए इसका उपयोग न करें यह सिंक्रनाइज़ेशन प्रदान नहीं करता है और डेटा दौड़ के साथ अपना कोड छोड़ देता है। इसके विपरीत, साझा स्थिति को सही तरीके से एक्सेस करने पर, आपको अस्थिर की आवश्यकता नहीं है।

सही कोड जो आपके माध्य साझा साझा स्थिति के लिए परमाणु चर का उपयोग करता है या साझा स्थिति को संरक्षित करता है एक म्यूट एक्स के साथ, और साझा स्थिति सभी थ्रेड्स द्वारा ठीक से देखे जायेगी। उदाहरण के लिए:

  #include & lt; परमाणु & gt; std :: परमाणु & LT; पूर्णांक & gt; X = 0; रहित थ्रेड 1 () {जबकि (सच) {नींद (1); यदि (एक्स & gt; 0) तोड़; }} शून्य धागा 2 () {जबकि (सच) {नींद (1); एक्स ++; }}  

कोई भी बिंदु पर अस्थिर

ध्यान दें कि अस्थिर उपयोगी हो सकता है भीतर एक धागा को लागू करने के लिए कि एक लूप जिसकी अन्यथा कोई दुष्प्रभाव नहीं होता है, इसका मूल्यांकन किया जाता है:

  // (वाष्पशील int i = 0; i! = LARGE_NUMBER; ++ i) {/ * कुछ नहीं * /} // या यहां तक ​​कि: के लिए (इंट आई = 0; कॉन्स्ट-कस्ट एंड लेफ्टिनेंट; वाष्पशील इंट & amp;; (i)! = LARGE_NUMBER; ++ i) {}  

No comments:

Post a Comment