Fence和非原子操作的ordering
2024-09-15 14:09:30
除了在原子操作中标记memory ordering外,还可以单独使用fence指定memory ordering。Fence是全局的操作,它影响所执行线程中其他原子操作的ordering。
1 |
atomic<bool> x,y; |
上面的代码中,如果没有显式的fence,z
的值是不确定的。
关于fence,有几个synchronizes-with规则:
- 如果acquire操作能读取到位于release fence后面store的写入的值,那么这个fence synchronizes-with acquire操作。
- 如果位于acquire fence前面的load操作能够读取到release操作的值,那么这个release操作synchronizes-with acquire fence。
- 如果位于acquire fence前面的load操作能够读取到位于release fence后面的store写入的值 大专栏 Fence和非原子操作的ordering,那么release fence synchronizes-with acquire fence。
对于上面的代码,因为y的load能够读取到前面写入的值(由于fence存在,保证了ordering),所以release fence synchronizes-with acquire fence。
Ordering Nonatomic
1 |
bool x; |
现在把前面例子中的x换为普通的x,z的值仍然是有保证的,y必须是原子的。fence保证了x的store和y的store,以及y的load和x的load之间的ordering,而y的store和load之间有happens-before关系,因此x的store和load之间也有happens-before关系(传递)。
最新文章
- rinetd
- python 多线程实例
- Netty的TCP粘包/拆包(源码二)
- Android本地数据存储之SQLite关系型数据库 ——SQLiteDatabase
- 固态硬盘寿命实测让你直观SSD寿命!--转
- Internet信息服务找不到
- Codeforces Round #352 (Div. 2) C. Recycling Bottles 贪心
- 转!!深入理解 Session 与 Cookie
- linux centos安装编译phantomjs 2.0的方法
- MATLAB light material lighting
- 线程本地变量ThreadLocal
- Java集合类操作优化经验总结
- arcgis api for silverlight使用google map等多个在线地图
- hdu 5823 color II 状压dp
- QTableView
- 开辟sys节点用户层直接操作物理地址(比/dev/mem方便)
- java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader
- mongDb安装
- rnnlib依赖ubuntu环境配置
- Linux sed命令使用方法
热门文章
- nginx 报错Malformed HTTP request line, git 报错fatal: git-write-tree: error building trees
- JavaScript mixins
- 深入理解spring中的AOP原理 —— 实现MethodInterceptor接口,自已动手写一个AOP
- 转发和重定向简介及与之相关的(URL)参数(parameter)、属性(attribute)问题探讨
- JavaSE--Java 的基本程序设计结构
- Django专题-中间件
- fiddler抓包可以抓到电脑数据抓不到手机上的数据------防火墙问题
- InsertionSort(插入排序)原理及C++代码实现
- ESLint javascript格式要求
- 蓝桥杯 传球游戏(dp)