bool expected = false;
extern std::atomic<bool> current; // set somewhere else
while (!current.compare_exchange_weak(expected, true)
&& !expected);
对current.exchange(expected)
使用此代码需要什么?
exchange
会导致一些竞争条件吗?
已编辑:同一问题与current.store(expected)
答案 0 :(得分:1)
exchange
和compare_exchange_weak
通常具有不同的语义,但在您的示例中,您似乎并不依赖任何可以证明这一点的行为。如果你有两个或更多的线程竞相写出相同的值,那么谁先到达那里并不重要,事实上你甚至不需要保护std :: atomic。要理解这些差异,您必须查看一个示例,其中给定线程的行为取决于在调用exchange
或compare_exchange_weak
之前发生的事情。< / p>