对atomic<int>类型的操作

#include <iostream>
#include<atomic>
//子整型支持fetch_add(), fetch_sub(), fetch_and(), fetch_or(), fetch_xor()等操作,以及这些操作的复合赋值形式(+=, -=, &=, |=, ^=),
// 命名函数原子地执行其操作并返回旧值,而复合赋值运算符返回新值
//没有除法、乘法和位移运算符
//std::atomic<int>等原子整型类型除了常规的加载、存储、交换等操作外,还提供了一系列的复合赋值操作
//对于原子整型,我们还可以执行前缀和后缀的增量和减量操作,如++x, x++, --x, x--
void Test() {
    //这些操作的返回值都是int,而不是atomic<int>
    std::atomic<int> val(10); 
    //算术运算符
    std::cout << "val + 10 = " << val + 10 << "\n";
    int sub = val - 10; //返回新值
    std::cout << "val - 10 = " << sub << "\n";

    //算术函数
    int pre_val1 = val.fetch_add(1);
    std::cout << "val+1前的val为 :" << pre_val1 << " val+1后的val为:" << val.load() << "\n";
    int pre_val2 = val.fetch_sub(1);
    std::cout << "val-1前的val为 :" << pre_val2 << " val-1后的val为:" << val << "\n";

    //位运算符
    std::cout << "val | 0 = " << (val | 0) << "\n";
    std::cout << "val & 0 =" << (val & 0) << "\n";
    std::cout << "val ^ 0 =" << (val ^ 0) << "\n";

    //位运算函数
    int pre_val3 = val.fetch_or(0); 
    std::cout << "val | 0前的val为 :" << pre_val3 << " val|1后的val为:" << val.load() << "\n";
    int pre_val4 = val.fetch_and(0);
    std::cout << "val & 0前的val为 :" << pre_val4 << " val&1后的val为:" << val << "\n";
    int pre_val5 = val.fetch_xor(0);
    std::cout << "val ^ 0前的val为 :" << pre_val5 << " val&1后的val为:" << val << "\n";

    //复合运算符
    val += 1;
    std::cout << "val += 1后val = " << val << "\n";
    val -= 1;
    std::cout << "val -= 1后val = " << val << "\n";
    val &= 1;
    std::cout << "val &= 1 后val = " << val << "\n";
    val |= 1;
    std::cout << "val |= 1后val = " << val << "\n";
    val ^= 1;
    std::cout << "val ^= 1后val = " << val << "\n";
    
    //自增运算符
    std::cout << "val++ = " << ++val << "\n";
    std::cout << "++val = " << ++val << "\n";
    std::cout << "val-- = " << val-- << "\n";
    std::cout << "--val = " << --val << "\n";
}

int main(){
    Test();
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值