shared_ptr 交换线程安全吗?
Is shared_ptr swap thread safe?
这里有一些代码片段。
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
不是线程安全的,但还有另一个函数是:
atomic_store(&global, sp);
还有 atomic_exchange
returns 旧值,如果您需要的话。
这里有一些代码片段。
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
不是线程安全的,但还有另一个函数是:
atomic_store(&global, sp);
还有 atomic_exchange
returns 旧值,如果您需要的话。