【问题标题】:Using compare_exchange_strong on atomic booleans (C++)在原子布尔值上使用 compare_exchange_strong (C++)
【发布时间】:2021-12-27 03:15:49
【问题描述】:

我是并发编程的新手,我正在尝试编译以下代码:

private:
  std::atomic<bool> resizing_;

void Resize() { if (resizing_.compare_exchange_strong(false, true)... }

这会引发error: no matching member function for call to 'compare_exchange_strong',我不确定如何解决这个问题。我尝试使用bool* 作为第一个参数,但这似乎没有帮助。我尝试阅读atomic&lt;&gt;s 上的文档,但没有帮助。

任何关于我做错了什么的信息都会非常有帮助!

【问题讨论】:

标签: c++ concurrency atomic


【解决方案1】:

compare_exchange_strong 方法的第一个参数是对类型的引用。此方法交换两个值,但仅当contained 值和expected 值的比较 为真。否则,它将用包含的值替换期望值。

成语是这样的:

std::atomic<int> value;

int expected = value;
do {
    int new_value = get_updated_value(expected);
} while(!value.compare_exchange_strong(expected, new_value));

请注意,只要比较结果为假,expected 就会自动更新,并且每次迭代都会评估另一个 new_value

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 2017-11-24
    • 1970-01-01
    • 2017-09-27
    • 2010-12-27
    • 2017-08-14
    • 2023-03-02
    • 2021-05-21
    • 1970-01-01
    相关资源
    最近更新 更多