5.2 C++中的原子操作和原子类型

5.2 C++中的原子操作和原子类型

原子操作是一类不可分割的操作,当这样操作在任意线程中进行一半的时候,你是不能查看的;它的状态要么是完成,要不就是未完成。如果从对象中读取一个值的操作是原子的,并且对对象的所有修改也都是原子的话,那么加载操作要不就会检索对象初始化的值,要不就将值存在某一次修改中。

另一方面,非原子操作可能会被视为由一个线程完成一半的操作。如果这种是一个存储操 作,那么其他线程看到的,可能既不是存储前的值,也可能不是已存储的值。如果非原子操 作是一个加载操作,那么它可能会去检索对象的部分成员,或是在另一个线程修改了对象的 值后,对对象进行检索;所以,检索出来的值可能既不是第一个值,也不是第二个值,可能 是某种两者结合的值。这就是一个简单的条件竞争(如第3章所描述),但是这种级别的竞争会 构成数据竞争(详见5.1节),且会伴有有未定义行为

在C++中(大多数情况下)你需要一个原子类型去执行一个原子操作,所以我们来看一下原子类 型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值