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)

最佳答案

exchangecompare_exchange_weak总体上具有不同的语义,但是在您的示例中,它看起来并不依赖于任何能够证明这一点的行为。如果您有两个或多个线程争分夺秒地写入相同的值,那么谁先到达那里并不重要,实际上,您甚至不需要保护std::atomic。要理解这些差异,您必须看一个示例,其中给定线程的行为取决于到达exchangecompare_exchange_weak之前的情况。

关于c++ - 原子交换与compare_exchange_xxx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27354529/

10-12 20:41