Avatar ·

什么是C++11中的内存模型,它如何影响多线程编程?

大家好!我开始学习C++中的多线程,然后遇到了术语“内存模型”(memory model),它出现在C++11标准中。老实说,我不完全理解这是什么意思以及为什么需要它。 以前我编写简单的单线程程序,觉得内存很直观:变量存储在RAM中,CPU读取和写入它们。但当我尝试编写一个有两个线程的简单示例时,开始遇到奇怪的问题。代码如下: ```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”或直接挂起。我听说