In the following code
int a = A.load(std::memory_order_acquire);
T b = load_non_atomic(data);
// ---- barrier ----
int c = A.load(std::memory_order_acquire);
What kind of barrier should I use to avoid reordering of load_non_atomic()
after c
even on weak memory model architectures (e.g ARM)?
Intuitively I need a std::atomic_thread_fence(std::memory_order_release)
to disallow r/w operations to be reordered after it, but does it allowed to use release for loads?