Brpc源码浅析(三)C++11 原子操作 内存模型 内存屏障

关于C++11原子操作相关的知识,着实有点晦涩难懂,但这又是看懂Brpc源码必备的知识点之一。在网上查找了很多前人关于这块的解读文章,不同文章之间的解读确有些许出入。本文仅对自己了解和认可的部分做解释和梳理,形成自己的理解。日后发现有错误不足的地方,再做修正补充。

一. 原子性,可见性,内存序的区分

我们以一个最简单的语句x.store(1, memory_order_relaxed);为例,这条语句的功能有以下三点:

  1. 原子性:原子地存储了变量x的值。当然x如果是个普通的内置整型,直接x=1也是一条指令的原子操作,关于这一点可以参考文章:如果多个线程之间只有一个共享变量,对它的原子操作是否没有多核可见性顺序问题而永远无需使用内存屏障?
  2. 可见性:x的值在某个CPU核心上原子地改变了,这个新值会异步同步到各个CPU核心上去,且各个CPU感知到最新值的时间是不同的,但是各个核心感知到x值的变化顺序会是一致的(modification order)
  3. 内存序:即内存模型,主要约束的是原子变量和原子变量前后的内存读写操作执行顺序以及对其他线程可见顺序之间的关系(这里的可见是指原子变量的可见和其他普通内存操作可见之间的顺序关系,比如其他线程看到了原子操作的修改则一定看到了原子操作之前指令的修改等)

关于原子性和可见性,

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值