首页 > 解决方案 > 内存屏障对其他线程的数据可见性的影响

问题描述

当一个线程 T 在任何时间点读取一个对象时,它看到的值可能是:

  1. 对象的初始值。
  2. T 存储的值。
  3. 另一个线程存储的值。

还有内存屏障(Load-LoadLoad-StoreStore-LoadStore-Store),可以定义为:

<加载s| Store s>屏障无法重新排序通过屏障和 < Load s|之前 在屏障之后存储s>不能在屏障之前重新排序。

现在,假设线程 T1 正在执行这段代码:

load(X)
store(Y, 1)
-----------  <-- a barrier
load(Y)
store(X, 1)

而另一个线程 T2 正在执行这段代码:

load(Y)
------- <--- a barrier
load(X)

当障碍为:

  1. 负载-负载
  2. 加载存储
  3. 存储加载
  4. 商店-商店

谢谢!

标签: c++cc++11memory-barriers

解决方案


推荐阅读