全局:
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);
答案 0 :(得分:4)
原子操作的序列不是原子的。在b.exchange
和a.exchange
之间可能会发生某种情况,并观察到a
和b
都具有相同的值(a
的原始值)。
如果您不想这样,请使用某种类型的锁。