0
全球:交换中是否没有竞争条件?
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);
全球:交换中是否没有竞争条件?
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);
序列不是原子。在b.exchange
和a.exchange
之间可能会发生某些情况,并且观察到a
和b
具有相同的值(原始值为a
)。
如果你不想要这个,使用某种类型的锁。