में के प्रलेखन std::memory_order
cppreference.com पर आराम आदेश का एक उदाहरण है:
आराम से ऑर्डर देना
टैग किए गए परमाणु संचालन
memory_order_relaxed
सिंक्रनाइज़ेशन ऑपरेशन नहीं हैं; वे समवर्ती मेमोरी एक्सेस के बीच एक आदेश नहीं देते हैं। वे केवल परमाणुता और संशोधन आदेश स्थिरता की गारंटी देते हैं।उदाहरण के लिए, शुरू में x और y शून्य के साथ,
// Thread 1: r1 = y.load(std::memory_order_relaxed); // A x.store(r1, std::memory_order_relaxed); // B // Thread 2: r2 = x.load(std::memory_order_relaxed); // C y.store(42, std::memory_order_relaxed); // D
r1 == r2 == 42 का उत्पादन करने की अनुमति दी गई है, हालांकि, A को अनुक्रम से पहले B को थ्रेड 1 के भीतर और C को थ्रेड 2 के भीतर से पहले अनुक्रमित किया गया है , कुछ भी D के y के संशोधन क्रम में A के सामने आने से रोकता है, और B से X के संशोधन क्रम में C से पहले दिखाई दे रहा है। Y पर D का साइड-इफ़ेक्ट थ्रेड A में लोड A को दिखाई दे सकता है जबकि X पर B का साइड इफेक्ट लोड C को थ्रेड 2 में दिखाई दे सकता है। विशेष रूप से, यह तब हो सकता है जब D, C से पहले पूरा हो जाए। थ्रेड 2, या तो कंपाइलर रिडरिंग या रनटाइम के कारण।
यह कहता है "सी थ्रेड 2 के भीतर डी से पहले अनुक्रमित है"।
अनुक्रमित-पहले की परिभाषा के अनुसार, जो मूल्यांकन के क्रम में पाया जा सकता है , यदि ए को बी से पहले अनुक्रमित किया जाता है, तो बी के मूल्यांकन से पहले ए का मूल्यांकन पूरा हो जाएगा। चूंकि सी को थ्रेड 2 के भीतर डी से पहले अनुक्रमित किया गया है, डी शुरू होने से पहले सी को पूरा किया जाना चाहिए, इसलिए स्नैपशॉट के अंतिम वाक्य का शर्त हिस्सा कभी संतुष्ट नहीं होगा।