atomic 内存序_C语言原子操作的应用(内存次序,内存屏障)

内存次序

为优化程序代码,编译器和处理器可以自由地对任何无相互依赖关系的命令进行重新排列。例如,两个分配语句 a=0;B=1;,它们可以以任一顺序执行。然而,在多线程环境下,由于不同线程内存操作之间的依赖性对于编译器或处理器通常是不可见的,所以对编译器或处理器执行命令重新排序可能会引发错误。

使用原子对象可以默认地防止此类重新排序。但是,防止优化意味着可能会牺牲速度。有经验的程序员可以在较低的内存次序请求下,通过明确地使用原子操作提高性能。

对于每个执行原子操作的函数(例如 atomic_store()),都有另一个版本,这些函数的名称以 _explicit 结尾,如 atomic_store_explicit(),它们增加了一个类型为 memory_order 的参数。

memory_order 类型是一个枚举,它定义了以下常量,以指定特定的内存次序请求:

memory_order_relaxed

调用者指定无任何内存次序请求,从而使编译器可以自由地改变操作的顺序。

memory_order_release

指定在当前线程 T1 中对一个原子对象A进行写访问时执行释放操作(release operation)。释放操作的作用是:当另一个线程 T2 对 A 执行捕获操作时(读访问),所有 T1 曾对 A 执行的操作在 T2 捕获 A 以后,对 T2 都是可见的。

memory_order_acquire

指定对一个原子对象进行读访问时执行捕获操作(acquire operation)。它确保在该函数调用前,后续的内存访问操作不发生重新排列。

memory_order_consume</

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值