volatile是轻量级的synchronized,它在多处理器应用开发中保证了共享变量的“可见性”(可见性指当一个线程修改共享变量后,其它线程可以看到这个修改)。

volatile如果使用合理会比synchronized开销更小,因为volatile不会引起上下文的切换和调度。

  在x86处理器上,被volatile修饰的变量进行写操作时生成的汇编代码会被Lock指令修饰,Lock前缀的指令在多核处理器下会引发两件事情:

    a.将当前处理器缓存行的数据写回到系统内存。

    b.这个写回内存的操作会使在其他cpu里缓存了该内存地址的数据无效(缓存一致性协议,缓存通过嗅探总线上传播的数据来检查自己缓存的值是不是已经过期了)。

  volatile的两条实现原则:

  1)Lock前缀指令会引起处理器缓存回写到内存。

  2)一个处理器的缓存回写到内存会导致其它处理器的缓存无效。

最新文章

  1. framebuffer line_length 參數
  2. spring.net (3)依赖注入基础2
  3. select元素中设置padding效果
  4. Sql语句复习
  5. gdb 调试程序
  6. K/3 Cloud开发之旅 -- 主页自定义篇(一)
  7. android之简单图形绘制
  8. call()\apply()\bind()备忘录
  9. Javascript之运动框架2
  10. sqlserver 通过convert取得指定格式的时间
  11. Unity使用Kinect初级教程
  12. 一个轻量级的3D CSS 库
  13. GitHub上搭建个人网站
  14. Windows Azure Storage Client Library 2.0 入门
  15. 微坑---微信小程序ios上时间字符串转换为时间戳时,在开发工具上和安卓手机上运行成功
  16. NYOJ--42--dfs--一笔画问题
  17. Chapter 4 Invitations——4
  18. Spirng boot maven多模块打包不踩坑
  19. Android开发中遇到的问题(一)——Android模拟器端口被占用问题的解决办法
  20. cocos2d JS-(JavaScript) 基础语法运算符

热门文章

  1. 模拟搭建Web项目的真实运行环境(五)
  2. JAVA BigDecimal 小数点处理
  3. 51nod1183(Edit Distance)
  4. XML 特殊字符
  5. 移动端webapp自适应实践(css雪碧图制作小工具实践)图文并茂
  6. 程序员玩转A股
  7. curl使用简单介绍
  8. 百度地图API试用--(初次尝试)
  9. solr4.5安装配置 linux+tomcat6.0+mmseg4j-1.9.1分词
  10. BZOJ1527 : [POI2005]Pun-point