सी ++ 11संभव डुप्लिकेट:
Concurrency: Atomic and volatile in C++11 memory modelक्या सी ++ 11 <atomic> संचालन/स्मृति आदेश ताजगी की गारंटी देता है?
<atomic>
विनिर्देश के साथ
, वहाँ ताजगी के किसी भी गारंटी है? विभिन्न मेमोरी ऑर्डर के वर्णन केवल रीडरिंग के साथ सौदा करते हैं (जहां तक मैंने देखा है)।
विशेष रूप से, इस स्थिति में:
#include <atomic>
std::atomic<int> cancel_work(0);
// Thread 1 is executing this function
void thread1_func() {
...
while (cancel_work.load(<some memory order>) == 0) {
...do work...
}
}
// Thread 2 executes this function
void thread2_func() {
...
cancel_work.store(1, <some memory order>);
...
}
धागा 1 और धागा 2 cancel_work
को छोड़कर किसी भी अन्य डेटा साझा नहीं करते हैं, तो यह मेरे लिए है कि किसी भी आदेश देने की गारंटी देता है की जरूरत नहीं कर रहे हैं लगता है और std::memory_order_relax
दोनों की दुकान के लिए पर्याप्त होता है और भार। लेकिन क्या यह गारंटी देता है कि थ्रेड 1 को कभी भी स्थानीय स्मृति कैश लाइन को मुख्य मेमोरी से रीफ्रेश किए बिना cancel_work
का अपडेट दिखाई देगा? यदि नहीं, तो गारंटी देने के लिए न्यूनतम आवश्यक क्या है?
@UmNyobe मेरा कारण पूछने से पहले मुझे यह प्रश्न नहीं मिला क्योंकि यह अस्थिरता के बारे में प्रतीत होता है। जवाब एक डुप्लिकेट है, लेकिन सवाल यह नहीं है क्योंकि यह आपके द्वारा उल्लेख किए गए "परमाणु और अस्थिर" प्रश्न से अलग कुछ ढूंढने वाले लोगों द्वारा पाया जाएगा। – JanKanis