Wal*_*ltK 5 c++ multithreading memory-model memory-barriers stdatomic
具体来说,以下之间是否有任何有效的区别:
i = a.load(memory_order_acquire);
Run Code Online (Sandbox Code Playgroud)
或者
a.store(5, memory_order_release);
Run Code Online (Sandbox Code Playgroud)
和
atomic_thread_fence(memory_order_acquire);
i = a.load(memory_order_relaxed);
Run Code Online (Sandbox Code Playgroud)
或者
a.store(5, memory_order_relaxed);
atomic_thread_fence(memory_order_release);
Run Code Online (Sandbox Code Playgroud)
分别?
非宽松原子访问是否提供信号栅栏和线程栅栏?
你需要
atomic_thread_fence(memory_order_release);
a.store(5, memory_order_relaxed);
Run Code Online (Sandbox Code Playgroud)
和
i = a.load(memory_order_relaxed);
atomic_thread_fence(memory_order_acquire);
Run Code Online (Sandbox Code Playgroud)
取代
a.store(5, memory_order_release);
Run Code Online (Sandbox Code Playgroud)
和
i = a.load(memory_order_acquire);
Run Code Online (Sandbox Code Playgroud)
非宽松原子访问确实提供了信号栅栏和线程栅栏。