volatile的使用

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

比较synchronized和volatile

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

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

一、CPU术语

二、volatile写操作

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

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

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

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

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

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

原文地址:https://www.cnblogs.com/anyanpeng/p/14153999.html