以下是一些代码段。
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
线程安全吗?
答案 0 :(得分:19)
不,swap
不是线程安全的,但还有另一个功能:
atomic_store(&global, sp);
如果您需要,还会atomic_exchange
返回旧值。