在 C/C++ 中如何确保内存写入是在读取之后?

问题描述 投票:0回答:0

我最近在学习C/C++中的memory_order,我已经阅读了https://en.cppreference.com/w/cpp/atomic/memory_orderhttps://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);

谁能给我一些建议,非常感谢!

c++ c atomic compiler-optimization memory-barriers
© www.soinside.com 2019 - 2024. All rights reserved.