美文网首页
volatile底层原理,如何实现保证可见性的呢?如何实现保证有

volatile底层原理,如何实现保证可见性的呢?如何实现保证有

作者: test_java | 来源:发表于2020-04-20 15:16 被阅读0次

可见性

1lock指令
对volatile修饰的变量,执行写操作的话,JVM会发送一条lock前缀指令给CPU,CPU在计算完之后会立即将这个值写回主内存,同时因为有MESI缓存一致性协议,所以各个CPU都会对总线进行嗅探,自己本地缓存中的数据是否被别人修改

如果发现别人修改了某个缓存的数据,那么CPU就会将自己本地缓存的数据过期,然后这个CPU上执行的线程在读取那个变量的时候,就会从主内存重新加载最新的数据。

lock前缀指令 + MESI缓存一致性协议

有效性

(2)内存屏障:禁止重排序

底层就是插入了XX内存屏障,XX内存屏障,就可以保证指令不会重排

对于volatile修改变量的读写操作,都会加入内存屏障

每个volatile写操作前面,加StoreStore屏障,禁止上面的普通写和他重排;每个volatile写操作后面,加StoreLoad屏障,禁止跟下面的volatile读/写重排

每个volatile读操作后面,加LoadLoad屏障,禁止下面的普通读和voaltile读重排;每个volatile读操作后面,加LoadStore屏障,禁止下面的普通写和volatile读重排

相关文章

  • volatile底层原理,如何实现保证可见性的呢?如何实现保证有

    可见性 1lock指令对volatile修饰的变量,执行写操作的话,JVM会发送一条lock前缀指令给CPU,CP...

  • java并发机制的底层实现原理

    1、volatile定义与实现原理volatile修饰的共享变量能够保证可见性以及防止指令的重排序,并且能够保证对...

  • java并发(二):深入分析volatile实现原理

    volatile的原理实现可以看这篇文章,真的是从硬件层面上说明了volatile怎样保证可见性。volatile...

  • volatile

    目标 1、volatile如何保证内存可见性2、volatile如何禁止指令重排序3、内存屏障4、内存可见性5、关...

  • 死磕 java同步系列之volatile解析

    问题 (1)volatile是如何保证可见性的? (2)volatile是如何禁止重排序的? (3)volatil...

  • 2018-09-09

    语言基础(go)及生态 gorutine实现原理 gc channel 上下文管理器 map的底层实现,如何保证线...

  • volatile

    原理 volatile是如何来保证可见性的呢?在X86处理器下通过工具获取JIT编译器生成的汇编指令,有volat...

  • 伪共享与volatile

    volatile 先来说说volatie的作用 禁止指令重排 保证变量的可见性,但是不能保证互斥性 具体实现是采用...

  • volatile和CAS的一些问题总结

    1.volatile和CAS底层都使用lock前缀实现,有什么共通和区别的地方? volatile通过lock保证...

  • 多线程-volatile

    volatile by shihang.mai volatile特性 只保证了行程可见性,保证不了原子性 保证线程...

网友评论

      本文标题:volatile底层原理,如何实现保证可见性的呢?如何实现保证有

      本文链接:https://www.haomeiwen.com/subject/asrdihtx.html