【发布时间】:2013-03-17 12:43:55
【问题描述】:
不能保证交换两个unique_ptrs 是线程安全的。
std::unique_ptr<T> a, b;
std::swap(a, b); // not threadsafe
由于我需要原子指针交换并且我喜欢 unique_ptr 的所有权处理,有没有一种简单的方法可以将它们结合起来?
编辑:如果这是不可能的,我愿意接受替代方案。我至少想做这样的事情:
threadshared_unique_ptr<T> global;
void f() {
threadlocal_unique_ptr<T> local(new T(...));
local.swap_content(global); // atomically for global
}
在 C++11 中这样做的惯用方式是什么?
【问题讨论】:
-
首先,您将如何处理
T*? -
@JonathanWakely:老实说,我不知道。这就是我问这个问题的原因。我已经稍微放松了我的问题,
T*现在应该可以了。 -
有一个建议在isocpp.org/blog/2014/06/n4058 添加 atomic
(和 atomic )现在对您没有帮助,但评论可能有用。 (而且我认为通过与 atomic 一起工作的原始 T* 指针是目前你能做的最好的事情)。
标签: c++ c++11 unique-ptr lock-free atomic-swap