内存屏障

作者: 烟雨乱平生 | 来源:发表于2019-10-23 11:00 被阅读0次

内存屏障的作用

  1. 保证数据的可见性
    我们知道,内存中的数据除了在内存中的副本,还有可能在各个核的CPU中,当某个核修改了对应cache中的数据后,这时其它核中对应内存地址的数据还有主存中的数据就不是最新的了,其它核为了能够读取到最新的数据,需要执行memory barrier指令,把store buffer中的修改写到主存中。

  2. 防止指令之间的重排序
    前面讲到一条指令的执行会分为几个步骤,也就是pipeline,为了得到更高的性能,编译器或者处理器有可能会改变指令的执行顺序,以此来提高指令执行的并行度。不管是编译器还是处理器的重排序,都要遵守as-if-serial语义。as-if-serial说的是,不管怎么重排序,在单线程中执行这些指令,其结果应该是一样的。在多线程的情况下,需要memory barrier来保证整体的顺序,否则会出现意想不到的结果。

内存屏障分类

不同的处理器架构的memory barrier也不太一样,以Intel x86为例,有三种memory barrier

  • LoadBarriers
  • StoreBarriers
  • FullBarriers

LoadBarriers

对应lfence指令,强制所有在load屏障指令之后的指令,都在该load屏障指令执行之后被执行,并且一直等到load缓冲区被该CPU读完才能执行之后的load指令。这使得从其他CPU暴漏出来的程序状态对该CPU可见。

StoreBarriers

对应sfence指令,强制所有在store屏障之前的store指令,都在该store屏障指令执行之前被执行,并把store缓冲区的数据都刷到CPU缓存。这会使得程序的状态对其他CPU可见。

FullBarriers

对应mfence指令,保证该屏障指令执行完成之后,在下一条指令执行之前,所有在缓冲区的数据都刷新到CPU缓存里面。


相关文章

  • 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中,当某个核修改...

  • 内存屏障

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

  • 内存屏障

    以下截图及相关信息,均来源于马士兵公开课中 内存屏障 屏障指的是什么?屏障指的是一种特殊的指令(例如:barrie...

网友评论

    本文标题:内存屏障

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