在写入该变量的唯一线程中,使用memory_order_relaxed加载原子变量是否安全?

mat*_*tiu 1 c++ multithreading thread-safety c++11

我有一个写入原子变量的线程.(使用memory_order_release).线程A.

还有许多其他线程可以从该变量中读取.(使用memory_order_acquire).线程B.

在线程A中,使用memory_order_relaxed读取该变量是否安全?

pre*_*ing 9

是的,它在某种意义上是安全的,它的行为与由单个线程操纵的非原子变量相同.

例如,如果写释放之前测序按照程序顺序轻松读取,并且没有其他写入该变量,然后轻松读取将看到由写入释放写入值(N3337 §1.10.12-13 ).


Tsy*_*rev 5

是的,memory_order_relaxed在线程A中读取变量时使用它就足够了.由于程序顺序的原因,此读取将始终处于发生之前与写入的关系中,发生在同一线程中.