什么是 memory order

Memory order 是指程序中的执行顺序,它控制着多个线程之间访问共享变量的顺序,从而确保程序的正确性。C++ 标准定义了五种不同的 memory order,分别是:relaxed、consume、acquire、release 和 acq_rel。

relaxed memory order

Relaxed memory order 是最低的 memory order,它不会强制执行任何特定的内存顺序,而只是指示编译器可以对指令序列进行任意重排序。它可以用于提高程序的性能,但也可能导致程序的不正确性。

consume memory order

Consume memory order 是比 relaxed memory order 更高的 memory order,它指示编译器只能重排序消费操作,而不能重排序生产操作。它可以避免读取到未初始化的数据,但是它不能保证读取到的数据是最新的。

acquire memory order

Acquire memory order 是比 consume memory order 更高的 memory order,它指示编译器在重排序时,只能将消费操作放置在生产操作之前,从而保证读取到的数据是最新的。

release memory order

Release memory order 是比 acquire memory order 更高的 memory order,它指示编译器在重排序时,只能将生产操作放置在消费操作之前,从而保证数据的正确性。

acq_rel memory order

Acq_rel memory order 是最高的 memory order,它将 acquire memory order 和 release memory order 结合在一起,它指示编译器只能将生产操作放置在消费操作之前,从而保证读取到的数据是最新的,同时也保证数据的正确性。