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)
最佳答案
exchange
和compare_exchange_weak
总体上具有不同的语义,但是在您的示例中,它看起来并不依赖于任何能够证明这一点的行为。如果您有两个或多个线程争分夺秒地写入相同的值,那么谁先到达那里并不重要,实际上,您甚至不需要保护std::atomic。要理解这些差异,您必须看一个示例,其中给定线程的行为取决于到达exchange
或compare_exchange_weak
之前的情况。
关于c++ - 原子交换与compare_exchange_xxx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27354529/