首页 > 移动平台 > 详细

Android开发——volatile详解

时间:2020-12-05 19:53:49      阅读:27      评论:0      收藏:0      [点我收藏+]

volatile特性

可以把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步

技术分享图片

可以看成

技术分享图片

 

 

所以volatile变量自身具有下列特性:

可见性。对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。

原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。

volatile虽然能保证执行完及时把变量刷到主内存中,但对于count++这种非原子性、多指令的情况,由于线程切换,线程A刚把count=0加载到工作内存,线程B就可以开始工作了,这样就会导致线程AB执行完的结果都是1,都写到主内存中,主内存的值还是1不是2。

 

 

volatile的实现原理

volatile关键字修饰的变量会存在一个“lock:”的前缀。

Lock前缀,Lock不是一种内存屏障,但是它能完成类似内存屏障的功能。Lock会对CPU总线和高速缓存加锁,可以理解为CPU指令级的一种锁。

同时该指令会将当前处理器缓存行的数据直接写会到系统内存中,且这个写回内存的操作会使在其他CPU里缓存了该地址的数据无效。

 

Android开发——volatile详解

原文:https://www.cnblogs.com/lordjinsdream/p/14090607.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!