shared_ptr交换线程安全吗?

时间:2015-04-09 14:31:01

标签: c++ multithreading shared-ptr swap

以下是一些代码段。

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线程安全吗?

1 个答案:

答案 0 :(得分:19)

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

atomic_store(&global, sp);

如果您需要,还会atomic_exchange返回旧值。