Roy*_*NEU 2 c++ containers multithreading thread-safety stdvector
这应该是一个简单的问题,但我很难找到答案。
如果我在堆上有多个 std::vector,每个只能由一个线程访问,那么它们是线程安全的吗?也就是说,因为向量将专用于特定线程,所以我只关心向量调整自身大小时的内存访问冲突,而不关心并发访问、数据竞争等。
当然,我可以将每个向量粘贴在其线程的堆栈上,但它们将非常大,可能会导致我的应用程序中的堆栈溢出。
谢谢!
对不同对象的访问是线程安全的,的分配器new
使用的std::vector
当然也是线程安全的。
当然,我可以将每个向量粘贴在其线程的堆栈上,但它们将非常大,可能会导致我的应用程序中的堆栈溢出。
我认为你误解了如何vector
运作。对象本身只包含几个指针,仅此而已。内存几乎总是从动态存储(堆)分配。除非您用自己的分配器覆盖它并使用alloca
或类似的危险东西。
所以如果你这样做
std::vector<int> local_variable{1,2,3,4};
Run Code Online (Sandbox Code Playgroud)
内部三个指针的内存local_variable
将位于堆栈上,但1,2,3,4
对象位于堆上。