2011-11-21 152 views
0

简体中文: 我正在写入realbasic的插件。我有两个拥有自己线程的插件。一切都很好,直到我开始使用std :: vector。我在这两个插件中都有矢量变量,并且我没有使用矢量来使用相同的数据或在线程之间共享数据或其他任何东西。我的模型如下所示:在多线程C++程序中使用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上编译。

+5

也许'something'的拷贝构造函数不是线程安全的? –

+3

你可以把真实的代码?用你发布的内容,不可能知道它是否来自多线程情况。 – Raveline

+0

我同意上面关于复制构造函数的评论。异步修改的引用计数器是我相信的一个经典问题。 – Rulle

回答

1

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