shared_ptr 交换线程安全吗?

Is shared_ptr swap thread safe?

这里有一些代码片段。

std::shared_ptr<int> global(new int(1)); 


void swapper(int x)
{
    std::shared_ptr<int> sp(new int(x));  
    global.swap(sp); 
}

假设我想在并行线程中调用 swapper。那会是线程安全的吗?

我知道这个 answer。它显示了如果我将一个值重新分配给 global.

,那么分配指针是如何不是线程安全的

我的问题是 swap 成员函数本身是否是线程安全的。

一方面,shared_ptr 的控制块函数是线程安全的。 另一方面,我假设我正在切换指向控制块的指针,所以它不应该是线程安全的。

这有什么联系? swap线程安全吗?

不,swap 不是线程安全的,但还有另一个函数是:

atomic_store(&global, sp);

还有 atomic_exchange returns 旧值,如果您需要的话。