ما هو نموذج الذاكرة في C++11 وكيف يؤثر على البرمجة متعددة الخيوط؟
مرحباً بالجميع! بدأت دراسة تعدد الخيوط في C++، وواجهت مصطلح "نموذج الذاكرة" (memory model) الذي ظهر في معيار C++11. بصراحة، لم أفهم تماماً ما يعنيه ولماذا هو مطلوب.
سابقاً، كنت أكتب برامج بسيطة أحادية الخيط، وبدا لي أن كل شيء واضح مع الذاكرة: المتغيرات موجودة في ذاكرة الوصول العشوائي، والمعالج يقرأها ويكتبها. لكن عندما حاولت كتابة مثال بسيط بخيطين، واجهت مشاكل غريبة. إليك الكود:
```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" أو يتجمد تماماً. سمعت أن