我如何为数组中的原子变量调用 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)?的主要内容,如果未能解决你的问题,请参考以下文章

DiagrammeR:我如何为流程图的某些节点使用不同的颜色?

使用 azure webjobs 我如何为计划任务传递参数

我如何为这个问题编写 SQL 语句?

我如何为 innerHTML 设置动画

我如何为所有活动设置一个基本抽屉

我如何为我的网站使用特定字体[重复]