线程A首先运行x.store(1,std :: memory_order_release), 然后线程B运行x.load(std :: memory_order_acquire)。 不能保证线程B中的x被A读取1个存储。 如果我使用memory_order_seq_cst,它将保证读取为1。对吗?
答案 0 :(得分:1)
线程A首先运行x.store(1,std :: memory_order_release),然后运行线程 B运行x.load(std :: memory_order_acquire)。
您怎么知道一个线程又进行了另一个操作?
本质上是通过测试共享状态?像原子?
因此,确定假设是否正确的方法是...测试结论:“读取A所存储的1”是对还是错。
因此问题的读法完全像重言式(如果x是2 + 2,则x等于2 + 2)或圆度。
答案 1 :(得分:0)
关于一个原子变量的加载/存储,内存顺序之间没有区别。这是因为 std::memory_order
指定了如何围绕原子操作对常规的非原子内存访问进行排序。
阅读std::memory_order了解更多详细信息。特别是:
对任何特定原子变量的所有修改都以特定于该原子变量的总顺序发生。