导入
内存模型
了解C++标准库中的多线程及其内存模型。
C++11 中的多线程
从 C++11 开始,C++ 首次支持原生多线程。该支持包含两个部分:明确定义的内存模型和标准化的线程接口。若想深入学习多线程,请参考相关课程《现代 C++ 并发编程实践:充分发挥任意机器的性能》。
内存模型
多线程的基础是明确定义的内存模型。该内存模型需处理以下三个方面:
- 原子操作:能够无中断执行的操作。
- 操作的部分有序性:必须保持顺序、不可重排的操作序列。
- 操作的可见性效果:保证共享变量上的操作何时对其他线程可见。
C++ 内存模型与其前身——Java 内存模型——有许多相似之处。但与 Java 不同的是,C++ 允许打破顺序一致性。顺序一致性是原子操作的默认行为,它提供以下两项保证:
- 程序中的指令按源代码顺序执行。
- 所有线程上的所有操作存在一个全局统一的顺序。