【问题标题】:how can i call compare_exchange_weak(0,1) for an atomic variable in an array?我如何为数组中的原子变量调用 compare_exchange_weak(0,1)?
【发布时间】: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?

【问题讨论】:

    标签: c++ multithreading stdatomic compare-and-swap


    【解决方案1】:

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

    你只需要一个局部变量:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 2020-07-08
      相关资源
      最近更新 更多