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

时间:2011-11-21 10:04:44

标签: c++ multithreading

简化为: 我正在写插件到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);
    }
}

如果我没有声明向量是静态的,那么程序大多数时候都会崩溃。但即使我将变量声明为静态,并使用某些算法(如排序或复制),崩溃也会再次出现。 看起来像vector上的操作正在使用一些不是多线程安全的抽象类或者其他东西。或者我做错了什么? 谢谢。

我正在使用Windows 7 x64,visual studio 2008 pro,发布win32上的编译。

1 个答案:

答案 0 :(得分:1)

AFAIK,分配器不是线程安全的。您应该以线程安全方式分配向量(保留)或使用线程安全分配器。