shared_ptr交换线程安全吗

Is shared_ptr swap thread safe?

本文关键字:安全 线程 交换 ptr shared      更新时间:2023-10-16

以下是一些代码片段。

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

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

假设我想在并行线程中调用swapper。那会不会很安全?

我知道这个答案。它显示了如果我将值重新分配给global,那么分配指针是如何不线程安全的。

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

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

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

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

atomic_store(&global, sp);

还有atomic_exchange,如果您需要的话,它会返回旧值。