c++ - 内存屏障对其他线程的数据可见性的影响
问题描述
当一个线程 T 在任何时间点读取一个对象时,它看到的值可能是:
- 对象的初始值。
- T 存储的值。
- 另一个线程存储的值。
还有内存屏障(Load-Load、Load-Store、Store-Load和Store-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)
当障碍为:
- 负载-负载
- 加载存储
- 存储加载
- 商店-商店
谢谢!
解决方案
推荐阅读
- python - 通过使用多个数据集进行拟合来改进单个数据集的模型预测
- android - Android 深层链接 - 允许在组织域上使用带有assetlinks.json 的子域 URL?
- android - 在我的 Flutter 项目中,在 AndroidManifest.xml 中添加 Browsable 类别会使我的应用无法使用
- sql - 在 SQL 中将全名拆分为名字和姓氏
- python - 在嵌套列表中查找选定元素的索引
- android - 将异步方法的结果保存在 Kotlin 的变量中
- java - 如何使用地图处理对象以进行 CSV 输出
- html - 未找到任何参数的“编辑”反向。尝试了 1 种模式:['wiki/edit/(?P
[^/]+)/$'] - r - 通过组合类别的二进制列?
- r - 从两个列表创建全局环境对象