如何理解 C++11 的六种 memory order?
2023-05-11 阅读 55
C++11 中的六种 memory order 是指在多线程编程中,用于指定原子操作的内存顺序。这六种 memory order 分别为:
1. memory_order_relaxed:没有任何同步或顺序限制。
2. memory_order_consume:确保本线程中,对于同一原子变量之前的读操作,不会被重排序到该原子操作之后。对于其他线程中的读操作没有任何保证。
3. memory_order_acquire:确保本线程中,对于同一原子变量之前的读操作,不会被重排序到该原子操作之后。同时,该原子操作之前的所有内存访问都完成之后,该原子操作才能执行。
4. memory_order_release:确保本线程中,该原子操作之后的所有内存访问都完成之后,该原子操作才能执行。同时,对于同一原子变量之后的写操作,不会被重排序到该原子操作之前。
5. memory_order_acq_rel:同时具有 memory_order_acquire 和 memory_order_release 的效果,即在该原子操作之前和之后都有内存顺序限制。
6. memory_order_seq_cst:同时具有 memory_order_acq_rel 的效果,且保证所有线程所见到的操作顺序都是一致的,即所有线程都看到的操作顺序都是按照程序中的顺序执行的。
理解这些 memory order 的含义可以帮助我们更好地编写多线程程序,保证线程之间的同步和顺序正确。
更新于 2023年05月13日