【发布时间】:2015-06-11 11:11:53
【问题描述】:
假设我们有一个简单的变量(std::atomic<int> var)和两个线程T1 和T2,我们有以下T1 的代码:
...
var.store(2, mem_order);
...
对于T2
...
var.load(mem_order)
...
我们还假设T2(load) 比T1(store) 执行123ns时间(根据C++ 标准的修改顺序晚)。
我对这种情况的理解如下(针对不同的内存顺序):
-
memory_order_seq_cst-T2加载必须加载2。因此,它必须有效地加载最新值(就像 RMW 操作一样) -
memory_order_acquire/memory_order_release/memory_order_relaxed-T2没有义务加载2但可以加载任何较旧的值,唯一的限制是:该值不应早于该线程加载的最新值。因此,例如var.load返回0。
我的理解是否正确?
更新1:
如果我的推理有误,请提供 C++ 标准中的文本来证明它。不仅仅是一些架构如何工作的理论推理。
【问题讨论】:
标签: c++ multithreading atomic