【发布时间】: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