我如何为数组中的原子变量调用 compare_exchange_weak(0,1)?

how can i call compare_exchange_weak(0,1) for an atomic variable in an array?

当我写下这样的代码时:

#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?

数组部分无关紧要,compare_exchange_weak将引用作为第一个参数(期望值)。文字 0 不能绑定到引用。

你只需要一个局部变量:

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

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