![](/img/trans.png)
[英]Why does compare_exchange_strong fail with std::atomic<double>, std::atomic<float> in 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<>
的文档,但没有帮助。
任何关于我做错了什么的信息都会非常有帮助!
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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.