我如何为数组中的原子变量调用 compare_exchange_weak(0,1)?
Posted
技术标签:
【中文标题】我如何为数组中的原子变量调用 compare_exchange_weak(0,1)?【英文标题】:how can i call compare_exchange_weak(0,1) for an atomic variable in an array? 【发布时间】:2019-12-11 03:13:05 【问题描述】:当我写下这样的代码时:
#include <atomic>
#include <array>
using namespace std;
int main()
array< atomic<int>, 5> a;
a[1].compare_exchange_weak(0,1);
编译器输出:
no known conversion for argument 1 from 'int' to 'std::__atomic_base<int>::__int_type& aka int &'
那么,谁能解释一下为什么会失败?如何在原子数组中使用 compare_exchange_weak?
【问题讨论】:
【参考方案1】:数组部分无关紧要,compare_exchange_weak
将引用作为第一个参数(期望值)。文字 0
不能绑定到引用。
你只需要一个局部变量:
int expected = 0;
a[1].compare_exchange_weak(expected, 1);
这是因为,如果实际值不同,compare_exchange_weak 会将预期值设置为实际值。
【讨论】:
以上是关于我如何为数组中的原子变量调用 compare_exchange_weak(0,1)?的主要内容,如果未能解决你的问题,请参考以下文章