原子交换与compare_exchange_xxx

时间:2014-12-08 09:01:57

标签: c++ atomic

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)

1 个答案:

答案 0 :(得分:1)

exchangecompare_exchange_weak通常具有不同的语义,但在您的示例中,您似乎并不依赖任何可以证明这一点的行为。如果你有两个或更多的线程竞相写出相同的值,那么谁先到达那里并不重要,事实上你甚至不需要保护std :: atomic。要理解这些差异,您必须查看一个示例,其中给定线程的行为取决于在调用exchangecompare_exchange_weak之前发生的事情。< / p>