shared_ptr交换线程安全吗?

Joh*_*nes 17 c++ multithreading swap shared-ptr

以下是一些代码段.

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


void swapper(int x)
{
    std::shared_ptr<int> sp(new int(x));  
    global.swap(sp); 
}
Run Code Online (Sandbox Code Playgroud)

假设我想调用swapper并行线程.这是线程安全的吗?

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

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

一方面,shared_ptr的控制块功能是线程安全的.另一方面,我假设我正在切换到控制块的指针,所以它不应该是线程安全的.

有什么联系?是swap线程安全的?

Mik*_*our 21

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

atomic_store(&global, sp);
Run Code Online (Sandbox Code Playgroud)

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

  • @Barry:不,[`atomic_exchange`](http://en.cppreference.com/w/cpp/memory/shared_ptr/atomic). (5认同)