memory_order介绍

本文介绍了C++中的内存顺序概念,包括relaxed、sequential_consistency、acquire-release和consume四种类型,以及它们在线程同步和无锁编程中的作用。通过实例解释了不同内存顺序如何保证线程间的可见性和数据一致性。
摘要由CSDN通过智能技术生成

原因:查看Oboe源码,发现内部使用到std::atomic。故在此记录一下memory_order的理解

概况:通过不同的memory_order实现线程同步

介绍:线程间同步常规用法是通过互斥锁实现,但是在对性能要求实时性高的情况选,该方法不可取,故需要无锁编程,而无锁编程核心就是原子操作。针对C11提出的Atomic operations library(原子操作库)memory_order的原理是不可避免的。由于编译器优化和cpu指令优化,故会存在执行顺序和代码顺序不一致的情况,且多线程情况下,A线程能观测到c.d变量值更改的顺序不同于B线程给c.d变量赋值的顺序,且不同线程观测也会不同。举例如下:下面的这个伪代码就是为了说明线程B观察到的变量变化和线程A的赋值顺序是不同的。

int c,d,e;

thread A                                           thread B 此时有可能存在线程B发现e=3,d=2,而c=0的情况。

{                                                      {

     c = 1;d=2;e=3;                        assert(e==3);assert(d==2);assert(c==1);

}                                                       }

故在此引入了内存顺序,保证线程B在操作该内存时完全知道了A线程的变量赋值。首先介绍一下内存序


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值