atomic 内存序_C++ 的 6 种内存顺序,你都知道吗?

本文详细介绍了C++中与原子操作相关的6种内存顺序:memory_order_relaxed、memory_order_consume、memory_order_acquire、memory_order_release、memory_order_acq_rel和memory_order_seq_cst,并通过实例解析了它们之间的区别和应用场景。这些内存顺序主要用于解决多线程环境中的数据同步问题,确保原子操作的正确性。
摘要由CSDN通过智能技术生成

原标题:C++ 的 6 种内存顺序,你都知道吗?

来源:盐焗咸鱼

https://blog.csdn.net/qq_33215865/article/details/88089927

原子操作的内存顺序

有六个内存顺序选项可应用于对原子类型的操作:

1. memory_order_relaxed

2. memory_order_consume

3. memory_order_acquire

4. memory_order_release

5. memory_order_acq_rel

6. memory_order_seq_cst。

除非你为特定的操作指定一个顺序选项,否则内存顺序选项对于所有原子类型默认都是memory_order_seq_cst。

6个内存顺序可以分为3类:

1. 自由顺序

(memory_order_relaxed)

2.获取-释放顺序

(memory_order_consume, memory_order_acquire, memory_order_release和memory_order_acq_rel)

3.排序一致顺序

(memory_order_seq_cst)

1、std::memory_order_relaxed “自由”内存顺序

在原子类型上的操作以自由序列执行,没有任何同步关系,仅对此操作要求原子性。例如,在某一线程中,先写入A,再写入B。但是在多核处理器中观测到的顺序可能是先写入B,再写入A。自由内存顺序对于不同变量可以自由重排序。

这是因为不同的CPU缓存和内部缓冲区,在同样的存储空间中可以存储不同的值。对于非一致排序操作,线程没有必要去保证一致性。

# include

# include

# include

std::atomic< bool> x,y;

std::atomic< int> z;

voidwrite_x_then_y

{

x.store( true, std::memory_order_relaxed);

y.store( true, std::memory_order_relaxed);

}

voidread_y_then_x

{

while(!y.load( std::memory_order_relaxed));

if(x.load( std::memory_order_relaxed))

++z;

}

intmain

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值