关于c ++:对C ++ 11内存模型有什么好的解释?

What is a good explanation for the C++11 memory model?

本问题已经有最佳答案,请猛点这里访问。

具体地说,我在寻找一个简单的英语解释短语,如"加载前不能命令任何操作"或"写入后不能命令任何操作"等。什么是操作,它意味着什么得到"重新命令"?


不同的指令使用处理器的不同部分。现代超级标量处理器能够同时执行多个指令,只要它们使用不同的资源(从一个线程,我不是指多核)。因此,CPU实际上会在指令流中寻找它可以与当前指令流同时开始工作的指令(由于流水线和分支预测,指令在执行之前会被解码很长一段时间,这使得这种前瞻成为可能)。

CPU小心地尊重数据依赖性,这意味着如果一条指令使用另一条指令的结果,它们将以正确的顺序执行。但是,例如,如果两条指令写入两个不同的内存位置,而第一条指令由于等待整数除法单元可用而无法启动,那么"后一条"指令的内存写入实际上可能首先发生。

当其他线程正在查看这些内存位置时,这一点变得很重要。所以在指令集中有一个标志,称为内存屏障,它告诉CPU管道中的后续指令需要等待早期的指令,即使没有数据依赖性。C++ 11内存模型定义了源代码的外观,以说服编译器插入这些标志。


这在C++标准的第1条中得到了解释。1.9以后我相信。