先搬出并发三特性:原子性、顺序性、可见性。
列举6种:
memory_order_relaxed: 可对应load和store操作。保障原子性和可见性,不保障顺序性
memory_order_acquire: 仅对应于load操作,保障原子性和可见性,及部分的顺序性(后面的操作不能跑到该指令的前面去)
memory_order_release:仅对应于store操作,保障原子性和可见性,及部分的顺序性(前面的操作不能跑到该指令的后面去)
memory_order_acq_rel:可对应load和store操作,保障原子性、可见性和顺序性(相当于memory_order_acquire与memory_order_release的叠加)
memory_order_seq_cst: 可对应load和store操作。效果大于memory_order_acq_rel,具体的区别是,顺序一致性在通知变量失效时具有排他性
memory_order_consume:不建议使用
参考:http://senlinzhan.github.io/2017/12/04/cpp-memory-order/