我如何为数组中的原子变量调用 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会将预期值设置为实际值。
当我写下这样的代码时:
#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会将预期值设置为实际值。