c++ 11 atomic

概念

C++11起提供了atomic,可以使用它定义一个原子类型。

  • 为什么要定义一个原子类型?
    举个例子,int64_t类型,在32位机器上为非原子操作。更新时该类型的值时,需要进行两步操作(高32位、低32位)。如果多线程操作该类型的变量,且在操作时未加锁,可能会出现读脏数据的情况。

  • 解决该问题的话,加锁,或者提供一种定义原子类型的方法。

简单的使用

#include<atomic>
#include<iostream>
int main(){
  std::atomic<int64_t> value;//定义一个原子对象
  int64_t x=10;
  value.store(x);//将x存入该原子对象中
  value++;//使用原子对象特化的自增
  int64_t y=value.load(std::memory_order_relaxed);//取出原子对象中的值
  std::cout<<y<<std::endl;

}

其他原子类型相关操作

特化成员函数说明
fetch_add原子地将参数加到存储于原子对象的值,并返回先前保有的值
fetch_sub原子地进行参数和原子对象的值的逐位与,并获得先前保有的值
fetch_or原子地进行参数和原子对象的值的逐位或,并获得先前保有的值
fetch_xor原子地进行参数和原子对象的值的逐位异或,并获得先前保有的值
operator++令原子值增加一
operator++(int)令原子值增加一
operator–令原子值减少一
operator–(int)令原子值减少一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值