交换中是否没有竞争条件?

时间:2014-04-10 14:50:31

标签: c++ atomic

全局:

std::atomic<T*> a, b;

在主题A中:

// this like std::swap(a, b), but is it atomic?
a.exchange(b.exchange(a));

在主题B中:

T* p = a.load();
doSomethine(p);

1 个答案:

答案 0 :(得分:4)

原子操作的序列不是原子的。在b.exchangea.exchange之间可能会发生某种情况,并观察到ab都具有相同的值(a的原始值)。

如果您不想这样,请使用某种类型的锁。