【发布时间】:2026-02-10 11:50:01
【问题描述】:
下面的代码是 c++ concurrency in action 第 5 章中atomic<bool> 的使用示例。
为什么他们使用 compare_exchange_weak 来检查 b 是否设置,为什么他们在 while 循环中使用!expected?
bool expected=false;
extern atomic<bool> b; // set somewhere else
while(!b.compare_exchange_weak(expected,true) && !expected);
我可以把上面的代码改成下面这样的简单代码吗?
extern atomic<bool> b; // set somewhere else
while(!b.load());
【问题讨论】:
-
他们的代码将标志设置为真。看起来几乎等同于
b = true;没有循环。
标签: c++ concurrency c++14 compare-and-swap