【发布时间】:2021-06-04 00:36:03
【问题描述】:
std::array<unique_ptr<SomeClass>, 1000> globalArray;
void foo(int index)
{
globalArray[index] = make_unique<SomeClass>();
//or globalArray[index] = std::unique_ptr<SomeClass> p(new SomeClass); ?
}
考虑到这里我确定传递给 foo 的索引,它们不会重复并且不会超过 globalArray 的容量,所以不需要检查它,这段代码是否是线程-安全吗?
【问题讨论】:
-
SomeClass是否访问一些全局/并发变量? -
这能回答你的问题吗? Is unique_ptr thread safe?
-
创建 anything 是“线程安全的”,因为一次不能由多个线程创建单个对象。但是如果你把它的地址附加到一个指针上,一次只能有一个线程访问那个指针。
-
您需要考虑全局。我想你也在某个地方访问你分配给数组中元素的唯一指针。这些访问当然必须与创建元素同步
标签: c++ multithreading c++11 thread-safety unique-ptr