内存屏障(memory barrier)
作者:互联网
一、为什么需要内存屏障
内存屏障的引入,本质上是由于CPU重排序指令引起的。重排序问题无时无刻不在发生,主要源自以下几种场景:
- 编译器编译时的优化;
- 处理器执行时的多发射和乱序优化;
- 读取和存储指令的优化;
- 缓存同步顺序(导致可见性问题)
二、内存屏障的分类
barrier()就是compiler提供的屏障,作用是告诉compiler内存中的值已经改变,之前对内存的缓存(缓存到寄存器)都需要抛弃,barrier()之后的内存操作需要重新从内存load,而不能使用之前寄存器缓存的值。并且可以防止compiler优化barrier()前后的内存访问顺序。barrier()就像是代码中的一道不可逾越的屏障,barrier前的 load/store 操作不能跑到barrier后面;同样,barrier后面的 load/store 操作不能在barrier之前。
标签:load,缓存,barrier,屏障,内存,memory,compiler 来源: https://www.cnblogs.com/namudelong/p/15130140.html