在原子布尔值上使用 compare_exchange_strong (C++)

Using compare_exchange_strong on atomic booleans (C++)

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

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<>s 的文档,但没有帮助。

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

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