atomic cas

compare_exchange_weak和compare_exchange_strong则是著名的CAS(compare and set)。
参数会要求在这里传入期待的数值和新的数值。
它们对比变量的值和期待的值是否一致,如果是,则替换为用户指定的一个新的数值。如果不是,则将变量的值和期待的值交换。(zk 注释 那么期待的值就变成了变量最新的值)

https://www.cnblogs.com/dengzz/p/5686866.html

使用举例:

 #include "boost/atomic/atomic.hpp"
 boost::atomic_int32_t _process_num; 
 _num = 6;
 _num.fetch_add(1);
 int stale_num = _num.load();
 //一直循环直到_num为期望的stale_num时(保证上次拿到stale_num之后没有其他线程再来修改这个值),将_num设为123;
 while(_num.compare_exchange_weak(stale_num, 123)) {
}

在执行while循环的时候:
case1:如果_num 不等于 stale_num,则stale_num被修改为process_num最新的值了;return false;
case2:如果_num 等于 stale_num,则_num 被修改为指定的值123;stale_num值不变;return true;

总结:compare_exchange_weak(expect, val)
Case1:如果原子变量的值不等于expect的值,则expect被修改为原子变量的最新值;return false;
case2:如果原子变量到的值等于expect的值,则原子变量的值被修改为val;return true;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值