Java教程

内存屏障(memory barrier)

本文主要是介绍内存屏障(memory barrier),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、为什么需要内存屏障

内存屏障的引入,本质上是由于CPU重排序指令引起的。重排序问题无时无刻不在发生,主要源自以下几种场景:

  1. 编译器编译时的优化;
  2. 处理器执行时的多发射和乱序优化;
  3. 读取和存储指令的优化;
  4. 缓存同步顺序(导致可见性问题)

 

二、内存屏障的分类

barrier()就是compiler提供的屏障,作用是告诉compiler内存中的值已经改变,之前对内存的缓存(缓存到寄存器)都需要抛弃,barrier()之后的内存操作需要重新从内存load,而不能使用之前寄存器缓存的值。并且可以防止compiler优化barrier()前后的内存访问顺序。barrier()就像是代码中的一道不可逾越的屏障,barrier前的 load/store 操作不能跑到barrier后面;同样,barrier后面的 load/store 操作不能在barrier之前。

 

这篇关于内存屏障(memory barrier)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!