C++11 में मेमोरी मॉडल क्या है और यह मल्टीथ्रेडेड प्रोग्रामिंग को कैसे प्रभावित करता है?
सभी को नमस्ते! मैंने C++ में मल्टीथ्रेडिंग सीखना शुरू किया है, और तभी मुझे "मेमोरी मॉडल" (memory model) शब्द मिला, जो C++11 मानक में आया है। सच कहूं तो, मैं पूरी तरह से नहीं समझ पाया कि इसका क्या मतलब है और इसकी आवश्यकता क्यों है।
पहले मैं सरल सिंगल-थ्रेडेड प्रोग्राम लिखता था, और मुझे लगता था कि मेमोरी के बारे में सब कुछ स्पष्ट है: वेरिएबल RAM में होते हैं, प्रोसेसर उन्हें पढ़ता और लिखता है। लेकिन जब मैंने दो थ्रेड्स के साथ एक सरल उदाहरण लिखने की कोशिश की, तो मुझे अजीब समस्याएं आने लगीं। यहाँ कोड है:
```cpp
#include
#include
bool flag = false;
int value = 0;
void writer() {
value = 42;
flag = true;
}
void reader() {
while (!flag) {}
std::cout << "Value: " << value << std::endl;
}
int main() {
std::thread t1(writer);
std::thread t2(reader);
t1.join();
t2.join();
return 0;
}
```
मैंने उम्मीद की थी कि reader हमेशा "Value: 42" प्रिंट करेगा, लेकिन कभी-कभी प्रोग्राम "Value: 0" आउटपुट करता है या पूरी तरह से हैंग हो जाता है। मैंने सुना है कि