美文网首页
内存屏障(gold_axe)

内存屏障(gold_axe)

作者: 胖达_4b7e | 来源:发表于2020-02-06 13:08 被阅读0次

https://book.douban.com/subject/27034721/

Java逻辑上部分禁止重排序实现 是通过内存屏障

是jvm的工具, 我写代码用不到

保证可见性的2个动作:
刷新处理器缓存,冲刷处理器缓存
也是 通过内存屏障

内存屏障 定义

作用是: 禁止编译器和处理器 重排序, 保证有序性

定义
是对一类 仅针对内存读写操作指令 的跨处理器架构 比较抽象的称呼

不同处理器指令不同
读写操作是指对主内存的读写

刷新处理器缓存,冲刷处理器缓存 的副作用, 也保证了 可见性

内部锁的申请释放 字节码指令是
monitorenter
monitorexit

加载屏障 和 存储屏障

作用就是 刷新处理器缓存,冲刷处理器缓存
保证 可见性

内部锁

monitorenter获得锁以后, Load Barrier 加载屏障, 刷新处理器缓存
monitorexit释放锁以后, Store Barrier 加载屏障, 冲刷处理器缓存

这样使得,
临界区里面的代码, 能拿到最新的值(因为有加载屏障)
运行完以后更新的值也能推送到主内存(因为有存储屏障)

获取屏障 和 释放屏障

获取屏障: 在一个操作之,禁止它 和之后的操作重排
释放屏障: 在一个操作之,禁止它 和之前的操作重排

内部锁
这样把临界区包裹起来 让它不会被重排到外面
临界区内的操作有原子性

临界区内的重排不管
反正是出来以后 一下子刷给主存, 外部可见
里面重排了外部也看不到, 感知不到, 就是和没重排一样


用了内存屏障的地方

除了 synchronize

volatile字段的读写也用了内存屏障
禁止重排 高速缓存

final字段的赋值

相关文章

  • 内存屏障(gold_axe)

    https://book.douban.com/subject/27034721/[https://book.do...

  • leveldb源码学习--skiplist

    Skiplist原理 内存屏障 内存屏障,也称内存栅栏,内存栅障,屏障指令等,是一类同步屏障指令,是CPU或编译器...

  • Java的final关键字的内存语义

    概念介绍: 1.内存屏障: 内存屏障(Memory Barier,或者有时叫做内存栅栏,Memory Fence)...

  • 内存屏障在CPU、JVM、JDK中的实现

    前言 内存屏障(英语:Memory barrier),也称内存栅栏,内存栅障,屏障指令等,是一类同步屏障指令,它使...

  • 什么是内存屏障?

    内存屏障:是一种CPU质量,用于控制特定条件下的重排序和内存可见性问题。又称:内存栅栏 内存屏障作用: 阻止屏障两...

  • 内存屏障

    内存屏障(Memory Barrier,或有时叫做 内存栅栏,Memory Fence)是一种CPU指令,用于控制...

  • 内存屏障

  • 内存屏障

    内存屏障(Memory barrier) 为什么会有内存屏障 每个CPU都会有自己的缓存(有的甚至L1,L2,L3...

  • 内存屏障

    内存屏障的作用 保证数据的可见性我们知道,内存中的数据除了在内存中的副本,还有可能在各个核的CPU中,当某个核修改...

  • 内存屏障

    我们看到这个词语的时候觉得很高端,但是本质很简单,就是指定==事件先后执行的顺序== 一、意义 想要了解内存屏障,...

网友评论

      本文标题:内存屏障(gold_axe)

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