我最近在学习C/C++中的memory_order,我已经阅读了https://en.cppreference.com/w/cpp/atomic/memory_order,https://gcc.gnu.org/wiki/Atomic/ GCCMM/AtomicSync,但对此仍有一些困惑。
我想知道如何确保读后写。
在以下情况下,哪个可以确保编译器不会在读取y之前移动x的存储?我们只关注编译器生成汇编,不讨论 CPU 对指令的重新排序。
1.
atomic_load_explicit(&y, memory_order_acquire);
atomic_store_explicit(&x, 0, memory_order_relaxed);
atomic_load_explicit(&y, memory_order_relaxed);
atomic_store_explicit(&x, 0, memory_order_release);
atomic_load_explicit(&y, memory_order_relaxed);
atomic_store_explicit(&x, 0, memory_order_seq_cst);
atomic_load_explicit(&y, memory_order_relaxed);
atomic_signal_fence(memory_order_seq_cst);
atomic_store_explicit(&x, 0, memory_order_relaxed);
atomic_load_explicit(&y, memory_order_relaxed);
atomic_signal_fence(memory_order_acq_rel);
atomic_store_explicit(&x, 0, memory_order_relaxed);
谁能给我一些建议,非常感谢!