简单理解compare_exchange_weak函数

1、Atomic

C++11中提供了一系列的原子操作,atomic提供了常见的原子操作方法:

  • store 原子写操作,可以类比是赋值操作
    std::atomic<int> tem;
    tem.store(10);
  • load 原子读操作,可以类比读取
   std::cout<<"tem"<<tem.load()<<std::endl;
  • exchange 原子改变操作 a. exchange(b) 会把b的值赋值给a。
    std::atomic<int> tem;
    tem.store(10);
    std::atomic<int> tem1;
    tem1.store(30);
    tem.exchange(tem1);
    std::cout<<"tem:"<<tem<<" tem1:"<<tem1<<std::endl; //tem:30 tem1:30
  • compare_exchange_weak/compare_exchange_strong (是著名的CAS(compare and set))。
    参数传入期待值与新值,通过比较当前值与期待值的情况进行区别改变。
    a.compare_exchange_weak(b,c)其中a是当前值,b期望值,c新值
    a==b时:函数返回真,并把c赋值给a
    a!=b时:函数返回假,并把a复制给b
int main()   //相等案例
{
    std::atomic<int> a;
    a.store(10);
    int b=10;  //a==b
    int c=20;
    std::cout<<"a:"<<a<<std::endl;
    if(a.compare_exchange_weak(b,c))
    {
        std::cout<<"a true:"<<a.load()<<std::endl;
    } 
    std::cout<<"a:"<<a<<" b:"<<b<<" c:"<<c<<std::endl;
    return 0;
}

a:10
a true:20
a:20 b:10 c:20
int main()  //不等案例
{
    std::atomic<int> a;
    a.store(10);
    int b=100;  //a!=b
    int c=20;
    std::cout<<"a:"<<a<<std::endl;
    if(a.compare_exchange_weak(b,c))
    {
        std::cout<<"a true:"<<a.load()<<std::endl;
    } 
    std::cout<<"a:"<<a<<" b:"<<b<<" c:"<<c<<std::endl;

    return 0;
}
a:10
a:10 b:10 c:20

compare_exchange_weak比compare_exchange_strong的性能更高一些,常在循环中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值