内存屏障

710 阅读1分钟

内存屏障

  • 硬件层的内存屏障分为两种:Load BarrierStore Barrier即读屏障和写屏障。
  • 内存屏障有三个作用:
  1. 阻止屏障两侧的指令重排序;
  2. 它会强制将对缓存的修改操作立即写入主存;
  3. 如果是写操作,它会导致其他CPU中对应的缓存行无效。(缓存一致性(窥探技术 + MESI协议 ))

对于Load Barrier来说,在指令前插入Load Barrier,可以让高速缓存中的数据失效,强制从新从主内存加载数据;

对于Store Barrier来说,在指令后插入Store Barrier,能让写入缓存中的最新数据更新写入主内存,让其他线程可见。

java内存屏障

java的内存屏障通常所谓的四种即LoadLoad,StoreStore,LoadStore,StoreLoad实际上也是上述两种的组合,完成一系列的屏障和数据同步功能。

volatile内存屏障策略:

  • 在每个volatile写操作前插入StoreStore屏障,在写操作后插入StoreLoad屏障;
  • 在每个volatile读操作前插入LoadLoad屏障,在读操作后插入LoadStore屏障;

内存屏障保证缓存一致性优化

内存屏障