在多线程C++程序中使用std::vector时导致应用程序崩溃

crashing app when using std::vector in multithreaded C++ program

本文关键字:vector 崩溃 应用程序 std C++ 多线程 程序      更新时间:2023-10-16

简化:我正在为realbasic编写插件。我有两个插件,它们有自己的线程。在我开始使用std::vector之前,一切都很好。我有向量<>两个插件中的变量和我并没有使用向量来使用相同的数据或在线程之间共享数据或其他任何东西。我的模型是这样的:

thread_1{
    vector<> variable_1;
    foreach{
         variable_1.push_back(something);
    }
}

thread_2{
    vector<> variable_2;
    foreach{
         variable_2.push_back(something);
    }
}

如果我不声明向量是静态的,程序大多数时候都会崩溃。但是,即使我将变量声明为静态,并使用排序或复制等算法,崩溃也会再次出现。向量上的操作似乎使用了一些抽象类,这些抽象类不是多线程安全的。还是我做错了什么?非常感谢。

我使用的是windows7x64,visualstudio2008pro,编译版本为win32。

AFAIK,分配器不是线程安全的。您应该以线程安全的方式分配vector(reserve(,或者使用线程安全的分配器。