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

目录

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

1. CPU内存模型

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 Barriersload1 ; LoadLoad; load2确保load1数据的装载优先于load2及所有后续装载指令的装载
StoreStore Barriersstroe1 ; storestore; store2确保store1数据对其他处理器可见优先于store2及所有后续存储指令的存储
LoadStore Barriersload1 ; LoadStore; Store确保load1数据装载优先于store2以及后续的存储指令刷新到内存
StoreLoad BarriersStore1 ; StoreLoad; load2确保store1数据对其他处理器变得可见, 优先于load2及所有后续装载指令的装载

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值