C++ boost::线程组上的程序崩溃

C++ boost::线程组上的程序崩溃,c++,multithreading,boost,C++,Multithreading,Boost,我面临boost::thread_组的问题。 我的软件对从多个摄像头采集的图像执行一些图像处理,到目前为止,操作的单线程/串行执行已经成功完成,我已经使用google测试框架测试了所有单功能,只是为了避免一些代码错误或算法崩溃的可能性 当我启用多线程处理时,我向我的处理函数提供不同的数据(这些数据在线程之间不共享,但我想并行处理4个图像,以加快执行速度),过了一段时间后,我收到一个分割错误错误,程序退出。并非所有的try/catch块都能避免此崩溃 是否有任何提示/方法可以并行处理不同的数据并将

我面临boost::thread_组的问题。 我的软件对从多个摄像头采集的图像执行一些图像处理,到目前为止,操作的单线程/串行执行已经成功完成,我已经使用google测试框架测试了所有单功能,只是为了避免一些代码错误或算法崩溃的可能性

当我启用多线程处理时,我向我的处理函数提供不同的数据(这些数据在线程之间不共享,但我想并行处理4个图像,以加快执行速度),过了一段时间后,我收到一个分割错误错误,程序退出。并非所有的try/catch块都能避免此崩溃

是否有任何提示/方法可以并行处理不同的数据并将其存储在磁盘上

我将写下导致错误的代码片段:

boost::thread_group processingThreads;
for(unsigned int i = 0; i < images.size(); ++i)
{
     processingThreads.create_thread(boost::bind(processingFunction, i, param, backgrounds[i][0], images[i][0])); 
}
processingThreads.join_all();
先谢谢你


Mike

向我们展示
processingFunction
@Nick processingFunction中的代码@Nick processingFunction是一个沉重而漫长的函数,它调用处理图像操作的子例程。我猜您的处理函数中有一些共享状态,这将是第一个要查看的地方。如果您使用的是第三方库代码,那么它是线程安全的吗?在我看来,生成线程是可以的。我没有共享状态:ProcessingThread函数处理独立的数据,而不是在它们之间共享,我在处理线程中创建自己的函数类来处理数据。第三方库是线程安全的(我想OpenCV是线程安全的)。为了确保OpenCV是线程安全的(至少在您的使用中),请尝试删除对OpenCV函数的所有调用。它还存在故障吗?
bool processingThread(const unsigned int threadID, const ProjectConfiguration &param, Images &background, Images &cloud)
{
    try{
           if(!loadImage(cloud))
           return false;

           ///Then: resize image, compute background mask, segment it.
           return true;
    catch(...){  return false; }
}