C++基础:内存一致性和多线程的关系

转载于知乎问题:https://www.zhihu.com/question/24301047

其实多线程间代码本来就是各自执行各自的,这个和memory order是两个概念,memory order是针对单线程重排序规则的概念,概念本身可以不讲多线程。多线程只是利用了memory order的规则加内存一致性来做线程同步而已。

因为概念混乱,1,2,3,4都不太对的感觉。

第一点,relaxed,线程内不保证所有原子操作是顺序进行的,而是如其字面意思在不影响逻辑的条件下最大限度的重排序(relax顺序),而非relax多线程间任意顺序。

第二点,release acquice本身是没有什么先后关系的,内存一致性保证了多线程读到的总是最新值,而不是因为release, acquice了才会读到。通常用法是acquice死循环反复读,多次读之后来确认release已经写入了这样做来达到线程同步。

第三点,release consume同样会影响release前的所有写操作,只要是release,这个之前的操作就不能重排序到release之后。consume的限制比acquire少的地方在于允许和consum变量无关的操作重排序到consume前。

第四点, sequential,就是各自线程顺序执行不进行重排序而已,和多线程同步不同步的是两个概念。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值