目录

  • CPU内存模型
  • CPU执行乱序原因
  • cpu 内存屏障
    • 作用
    • 分类
  • JMM内存屏障
    • 作用
    • 分类

1. CPU内存模型

并发编程学习---内存屏障

2. CPU执行乱序原因

由于在多CPU的机器上,每个CPU都存在cache,当一个特定数据第一次被特定一个CPU获取时,由于在该CPU缓存中不存在,就会从内存中去获取,被加载到CPU高速缓存中后就能从缓存中快速访问。当某个CPU进行写操作时,它必须确保其他的CPU已经将这个数据从他们的缓存中移除,这样才能让其他CPU安全的修改数据。显然,存在多个cache时,我们必须通过一个cache一致性协议来避免数据不一致的问题,而这个通讯的过程就可能导致乱序访问的问题,也就是运行时的内存乱序访问

3. cpu 内存屏障

3.1 作用

解决CPU的执行乱序、保证数据的可见性,不能解决缓存一致性问题

3.2 分类

屏障名称 作用
写屏障(store barrier) 所有在storestore内存屏障之前的所有执行,都要在该内存屏障之前执行,并发送缓存失效的信号
所有在storestore barrier指令之后的store指令,都必须在storestore barrier屏障之前的指令执行完后再被执行
读屏障(load barrier) 所有在loadbarrier读屏障之后的load指令,都在loadbarrier屏障之后执行
全屏障(Full Barrier) 所有在storeload barrier之前的store/load指令,都在该屏障之前被执行
所有在该屏障之后的的store/load指令,都在该屏障之后被执行

4. JMM内存屏障

4.1 作用

同上

4.2 分类

屏障分类 指令示例 说明
LoadLoad Barriers load1 ; LoadLoad; load2 确保load1数据的装载优先于load2及所有后续装载指令的装载
StoreStore Barriers stroe1 ; storestore; store2 确保store1数据对其他处理器可见优先于store2及所有后续存储指令的存储
LoadStore Barriers load1 ; LoadStore; Store 确保load1数据装载优先于store2以及后续的存储指令刷新到内存
StoreLoad Barriers Store1 ; StoreLoad; load2 确保store1数据对其他处理器变得可见, 优先于load2及所有后续装载指令的装载

相关文章:

猜你喜欢
  • 2021-09-28
  • 2021-10-11
  • 2021-03-30
  • 2022-12-23
  • 2022-12-23
  • 2021-11-22
  • 2021-12-17
相关资源
相似解决方案