C++ 如何为数组中的原子变量调用compare_exchange_弱(0,1)?

C++ 如何为数组中的原子变量调用compare_exchange_弱(0,1)?,c++,multithreading,stdatomic,compare-and-swap,C++,Multithreading,Stdatomic,Compare And Swap,当我这样写代码时: #include <atomic> #include <array> using namespace std; int main() { array< atomic<int>, 5> a; a[1].compare_exchange_weak(0,1); } #包括 #包括 使用名称空间std; int main(){ 阵列a; a[1]。比较交换弱(0,1); } 编译器输出: no known conversi

当我这样写代码时:

#include <atomic>
#include <array>
using namespace std;

int main() {
  array< atomic<int>, 5> a;
  a[1].compare_exchange_weak(0,1);
}
#包括
#包括
使用名称空间std;
int main(){
阵列a;
a[1]。比较交换弱(0,1);
}
编译器输出:

no known conversion for argument 1 from 'int' to  'std::__atomic_base<int>::__int_type& {aka int &}'
参数1从'int'到'std:_原子基::_int_类型&{aka int&}没有已知的转换

那么,有人能解释为什么这失败了吗?如何在原子数组中使用compare\u exchange\u weak?

数组部分不相关,将引用作为第一个参数(期望值)。无法将文本
0
绑定到引用

您只需要一个局部变量:

int expected = 0;
a[1].compare_exchange_weak(expected, 1);

这是因为,如果实际值不同,则compare_exchange_weak将预期值设置为实际值。

数组部分不相关,将引用作为第一个参数(预期值)。无法将文本
0
绑定到引用

您只需要一个局部变量:

int expected = 0;
a[1].compare_exchange_weak(expected, 1);
这是因为,如果实际值不同,则compare_exchange_弱将预期值设置为实际值