java并发之volatile
2024-08-25 20:19:18
volatile是轻量级的synchronized,它在多处理器应用开发中保证了共享变量的“可见性”(可见性指当一个线程修改共享变量后,其它线程可以看到这个修改)。
volatile如果使用合理会比synchronized开销更小,因为volatile不会引起上下文的切换和调度。
在x86处理器上,被volatile修饰的变量进行写操作时生成的汇编代码会被Lock指令修饰,Lock前缀的指令在多核处理器下会引发两件事情:
a.将当前处理器缓存行的数据写回到系统内存。
b.这个写回内存的操作会使在其他cpu里缓存了该内存地址的数据无效(缓存一致性协议,缓存通过嗅探总线上传播的数据来检查自己缓存的值是不是已经过期了)。
volatile的两条实现原则:
1)Lock前缀指令会引起处理器缓存回写到内存。
2)一个处理器的缓存回写到内存会导致其它处理器的缓存无效。
最新文章
- framebuffer line_length 參數
- spring.net (3)依赖注入基础2
- select元素中设置padding效果
- Sql语句复习
- gdb 调试程序
- K/3 Cloud开发之旅 -- 主页自定义篇(一)
- android之简单图形绘制
- call()\apply()\bind()备忘录
- Javascript之运动框架2
- sqlserver 通过convert取得指定格式的时间
- Unity使用Kinect初级教程
- 一个轻量级的3D CSS 库
- GitHub上搭建个人网站
- Windows Azure Storage Client Library 2.0 入门
- 微坑---微信小程序ios上时间字符串转换为时间戳时,在开发工具上和安卓手机上运行成功
- NYOJ--42--dfs--一笔画问题
- Chapter 4 Invitations——4
- Spirng boot maven多模块打包不踩坑
- Android开发中遇到的问题(一)——Android模拟器端口被占用问题的解决办法
- cocos2d JS-(JavaScript) 基础语法运算符