C++ 多线程环境(OpenMP)中的OpenCV导致分段错误

C++ 多线程环境(OpenMP)中的OpenCV导致分段错误,c++,multithreading,opencv,openmp,opencv3.0,C++,Multithreading,Opencv,Openmp,Opencv3.0,我已经安装了OpenCV 3.0.0。我的代码使用OpenMP进行多线程处理 每个线程访问相同的opencv函数convertTo 这会导致分段错误 错误没有发生 如果我在每个线程或 如果我只用一根线。 有人能帮忙吗,原因可能是什么?许多函数和数据openCV对不同的变量使用相同的内存地址,例如,如果您有一个矩阵a,并且您没有矩阵B=a,那么数据矩阵B存储在同一个Poccine内存a中,现在当您使用OpenMP时,必须确保在写入内存位置时,只需从单个线程执行,否则在运行时会出现错误 现在,当您使

我已经安装了OpenCV 3.0.0。我的代码使用OpenMP进行多线程处理

每个线程访问相同的opencv函数convertTo

这会导致分段错误

错误没有发生

如果我在每个线程或 如果我只用一根线。
有人能帮忙吗,原因可能是什么?

许多函数和数据openCV对不同的变量使用相同的内存地址,例如,如果您有一个矩阵a,并且您没有矩阵B=a,那么数据矩阵B存储在同一个Poccine内存a中,现在当您使用OpenMP时,必须确保在写入内存位置时,只需从单个线程执行,否则在运行时会出现错误

现在,当您使用单个线程时,没有问题,因为只有一个线程写入或读取Poccion内存

另一方面,当您使用函数将屏幕打印为printf或std::cout时,线程可能会延迟,也就是说,当一个线程打印时,另一个线程会写入内存位置,因此运行时出错的可能性会降低,但这并不意味着将来不存在

在循环中使用OpenMP保护来自不同线程的相同内存位置的写入时,解决方案是:`

 #pragma omp critical
{
    //code only be written from a thread
}

Mat对象在线程之间共享吗?不,convertTo在不同的矩阵上工作。您可以显示一些代码以便更容易地再现错误吗?我正在处理它,很抱歉延迟,但是从大型项目中提取它需要一些时间您的std::cout调用可能正在同步线程,因为一次只能有一个线程写入std::out。不过我很好奇,你有没有修改任何全局数据?你有没有检查一下clang的静态分析器有没有bug?