मुझे इस बारे में अनिश्चितता है कि सी ++ 11 में परमाणु चर के मेमोरी ऑर्डरिंग की गारंटी कैसे अन्य मेमोरी पर परिचालन को प्रभावित करती है।सी ++ 11 परमाणु मेमोरी ऑर्डर गैर-परमाणु चर के साथ
मान लें कि मेरे पास एक थ्रेड है जो आवधिक रूप से एक मूल्य को अद्यतन करने के लिए लेखन फ़ंक्शन को कॉल करता है, और दूसरा धागा जो वर्तमान मान प्राप्त करने के लिए पढ़ता है। क्या यह गारंटी है कि d = value;
के प्रभाव a = version;
के प्रभाव से पहले नहीं देखा जाएगा, और b = version;
के प्रभाव से पहले देखा जाएगा?
atomic<int> a {0};
atomic<int> b {0};
double d;
void write(int version, double value) {
a = version;
d = value;
b = version;
}
double read() {
int x,y;
double ret;
do {
x = b;
ret = d;
y = a;
} while (x != y);
return ret;
}
आपके कोड में कोई बाधा नहीं है; आपने इसे "स्मृति-बाधाओं" के साथ क्यों टैग किया? –
क्योंकि मैंने सोचा था कि उत्तर कुछ ऐसा हो सकता है "यह सही नहीं है, आपको स्मृति-बाधा का उपयोग करने की आवश्यकता है"। –
आप जो भी पूछ रहे हैं उसे पुनः लिखना चाहेंगे। इस सवाल का जवाब देने वाले लोग घृणित रूप से पैडेंटिक हैं, और इस बारे में उत्सुक लोगों के लिए अच्छे से अधिक नुकसान पहुंचा रहे हैं। –