【问题标题】:Is shared_ptr swap thread safe?shared_ptr 交换线程安全吗?
【发布时间】:2015-04-09 14:31:01
【问题描述】:

这里有一些代码sn-ps。

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,这个函数应该看起来像global.reset(new int(x))。
  • @Barry:如果您希望它是线程安全的,则不要。

标签: c++ multithreading shared-ptr swap


【解决方案1】:

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

atomic_store(&global, sp);

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 2019-06-07
  • 2010-10-01
  • 2016-09-05
相关资源
最近更新 更多