在原子布尔值上使用 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
。
我是并发编程的新手,我正在尝试编译以下代码:
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
。