摘要
原型为: enum memory_order;
如果不使用任何 同步机制(如mutex或atomic), 在多线程中读写同一个变量, 那么, 程序的结果是 难以预料的:
1. 即使是简单的语句, C++也不保证是 原子操作. 如 int i = 100;
2. CPU可能会调整 指令的执行顺序,
3. 在CPU cache的影响下, 一个线程 执行了某个命令, 不会立即被其它线程看见
原子操作指的是: 一个操作的状态要么就是 未执行, 要么就是 已完成.
memory_order 用作 atomic operations function的参数, 来指定 多线程 环境下 线程同步的方式.
memory_order是针对共享变量的.
CPU和compiler的优化也是基于 单线程的, 若变量只在单线程中执行, 那CPU和compiler的优化对其是没有任何影响的.
memory order是对atomic操作的一种约束, 通常atomic是一个多线程共享的变量, 因此要约定 CPU操作这个变量的顺序.
C++11 引入 memory model的意义在于 可以在high level language层面实现对多处理器中多线程共享内存交互的控制.
typedef enum memory_order {
memory_order_relaxed, // relaxed
memory_order_consume, // consume
memory_order_acquire, // acquire
m