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

时间:2015-09-25 23:11:09

标签: c++ multithreading c++11 thread-safety

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

还有许多其他线程从该变量中读取。 (使用memory_order_acquire)。 主题B

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

2 个答案:

答案 0 :(得分:9)

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

例如,如果写入版本之前按顺序放松读取程序顺序,并且没有其他写入该变量,那么放宽读取将看到写入写入的值-release(N3337§1.10.12-13)。

答案 1 :(得分:5)

是的,当在线程A中读取变量时,使用memory_order_relaxed就足够了。这个读取将始终在发生 - 与关系之前写入,发生在同一个线程中,因为程序顺序。