文章目录
参考
https://www.jianshu.com/p/64240319ed60
https://www.jianshu.com/p/08a0a8c984ab
内存屏障(内存栅栏)
内存屏障(Memory Barrier)
内存栅栏(Memory Fence)
因为编译器和处理器的指令重排,所以 多核 处理器需要使用 内存屏障指令 来确保 一致性。
内存屏障指令 作用于CPU与其缓存之间
定义两个指令:
- Store:将处理器缓存的数据刷新到内存中。即 写
- Load:将内存存储的数据拷贝到处理器的缓存中。即 读
内存屏障类型:
- LoadLoad Barriers
Load1; LoadLoad; Load2
确保 Load1 先于 Load2 - StoreStore Barriers
Store1; StoreStore; Store2
确保 Store1 立刻刷新数据到内存 (使其对其他处理器可见) 的操作先于 Store2 - LoadStore Barriers
Load1; LoadStore; Store2
确保 Load1 先于 Store2 - StoreLoad Barriers
Store1; StoreLoad; Load2
确保 Store1先于 Load2 。它会使该屏障之前的所有内存访问指令(存储指令和访问指令) 完成之后,才执行该屏障之后的内存访问指令
StoreLoad Barriers 同时具备其他三个屏障的效果,因此也称之为 全能屏障(mfence),是目前大多数处理器所支持的;但是相对其他屏障,该屏障的开销相对昂贵。