volatile并不是java语言的特产,c语言中也有,它的原始意义就是禁用CPU缓存
比较synchronized和volatile
volatile和sychronized都可以保证线程的可见性
volatile的优势,不引起线程上下文的切换
一、CPU术语
二、volatile写操作
加了volatile变量修饰后会多出两行汇编代码,有两个作用
(1)将当前处理器缓存行的数据写回到系统内存
(2)这个写回内存的操作会使在其他CPU缓存了该内存地址的数据无效
缓存的一致性问题是怎么解决的:
每个处理器通过嗅探在总线上传输的数据,从而来检查自己是否过期,如果发现自己过期则将缓存行设置成无效状态
当当前处理器需要对这个数据进行修改操作时,会重新从系统内存中读取数据进行处理