volatile并不是java语言的特产,c语言中也有,它的原始意义就是禁用CPU缓存

比较synchronized和volatile

volatile和sychronized都可以保证线程的可见性

volatile的优势,不引起线程上下文的切换

一、CPU术语

 

 

二、volatile写操作

 

 加了volatile变量修饰后会多出两行汇编代码,有两个作用

(1)将当前处理器缓存行的数据写回到系统内存

(2)这个写回内存的操作会使在其他CPU缓存了该内存地址的数据无效

 

缓存的一致性问题是怎么解决的:

每个处理器通过嗅探在总线上传输的数据,从而来检查自己是否过期,如果发现自己过期则将缓存行设置成无效状态

当当前处理器需要对这个数据进行修改操作时,会重新从系统内存中读取数据进行处理

 

posted on 2020-12-18 11:23  安晏朋  阅读(190)  评论(0编辑  收藏  举报