指令重排序所带来的问题及使用volatile关键字解决问题
2024-08-24 12:52:54
首先看下如下代码:
指令重排序和优化后代码如下:
if(!stop)
while(true){}
volatile最适合使用的是一个线程写、其他线程读的场合,如果有多个线程并发写操作,仍然需要使用锁或者线程安全的容器或者原子变量来代替。
当一个变量被volatile修饰后,它将具备以下两种特性。
· 线程可见性:当一个线程修改了被volatile修饰的变量后,无论是否加锁,其他线程都可以立即看到最新的修改,而普通变量却做不到这点。
禁止指令重排序优化,普通的变量仅仅保证在该方法的执行过程中所有依赖赋值结果的地方都能获取正确的结果,而不能保证变量赋值操作的顺序与程序代码的执行顺序一致。
最新文章
- js计算地球两个经纬度之间的距离
- iphone状态栏高度?
- Search Insert Position
- Ubuntu,QT5连接MySQL
- Visual Studio Online Integrations-Collaboration
- PBOC2.0与3.0的区别
- 20种常用的DOS命令小结
- Visual Studio快捷键小结
- objectivc-c---block
- 字符串查找KMP算法(转)
- ajax 假上传文件
- IDL 的读写
- Centos 7.0 zabbix 部署
- 近期学习docker遇到的一些问题
- ES6+Vue+webpack项目,在ie11中请求后台接口后数据更新,但是页面没有刷新?
- DB2(Procedure)存储过程遍历循环!
- numpy高级索引
- ES6 class的基本语法-学习笔记
- Android_OnLowMemory和OnTrimMemory
- LUA返回的是引用