volatile 关键字 先说 volatile 解决了可见性、顺序性,根据可见性引出内存模型 内存模型(JMM):主内存 工作内存 引出可见性问题:解决可见性问题可以依靠加锁和加 volatile 关键字,加锁为什么能解决可见性?因为加锁会在加锁前强制的从主内存中找到最新的值刷新到自己的工作内存中。 volatile 为什么能解决可见性:因为它保证了一个线程修改自己的工作内存的某个变量,会强制失效其他工作内存中的变量,那么又引出一个问题,在多线程修改同一个变量的情况下,以哪个线程修改的变量为主?为了解决一致性的问题所以引出了缓存一致性协议,缓存一致性协议有 MSI 协议、MESI 协议,我们以 MSEI 协议为例子说一下,如果一个线程修改了 CPU 的缓存,那么会通知其他 CPU 中的缓存失效,那么这个通知和接收通知是如何做到的?就是通过CPU 的嗅探功能(不断监听 CPU 总线发出的指令) 嗅探会有什么问题:总线风暴,如果 volatile 修饰的变量过多,每次修改变量都会向总线发送失效指令,会造成总线风暴。所以根据情况选择使用 volatile 还是锁。
展开
保洁阿姨于2021-03-26 22:09发布的图片
1
评论
Ctrl + Enter