Avatar ·

C++11 मेमोरी मॉडल क्या है और यह मल्टीथ्रेडेड प्रोग्रामिंग को कैसे प्रभावित करता है?

सभी को नमस्ते। मैं C++ सीख रहा हूँ और मल्टीथ्रेडिंग तक पहुँच गया हूँ। मैंने पढ़ा कि C++11 में एक 'मेमोरी मॉडल' आया जिसने सब कुछ बदल दिया। लेकिन मैं समझ नहीं पा रहा कि इसका मतलब क्या है और इसकी आवश्यकता क्यों है। पहले मैं कुछ इस तरह लिखता था: ```cpp #include #include #include int shared_data = 0; bool ready = false; void writer() { shared_data = 42; // चरण 1 ready = true; // चरण 2 } void reader() { while (!ready); // ready के true होने तक प्रतीक्षा करें std::cout << shared_data << std::endl; // क्या यहाँ हमेशा 42 होगा? } ``` मैंने इसे अपने कंप्यूटर पर चलाया और यह काम कर गया। लेकिन मुझे बताया गया कि मेमोरी मॉडल और सही बैरियर के साथ atomic ऑपरेशन के बिना, यह कोड दूसरे प्रोसेसर पर या कंपाइलर ऑप्टिमाइज़ेशन के दौरान टूट सकता है। क्यों? मैंने तो स्पष्ट रूप से `shared_data` को `ready` से पहले सेट किया है! क्या कंपाइलर या प्रोसेसर इन ऑपरेशनों को आपस में बदल सकते हैं? और यदि हाँ, तो C++11 मेमोरी मॉडल इसे कैसे रोकता है? समझाइए।