2016-03-08 69 views
-3

我安装了OpenCV 3.0.0。我的代码是使用OpenMP的多线程。多线程环境(OpenMP)中的OpenCV导致分段错误

每个线程访问相同的opencv函数(“convertTo”)。

这会导致分段错误。

误差不occurr

  1. 如果我在每个线程的开始或
  2. 打印使用std ::法院一个简单的声明,如果我只使用一个线程。

任何人都可以帮忙,原因可能是什么?

+0

是线程之间共享的垫目标? –

+0

不,“convertTo”适用于不同的矩阵 –

+4

您可以显示一些代码,以便重现错误? –

回答

0

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

现在,当你使用单线程时,没有问题,因为它只是一个写或读pocicion内存的线程。

另一方面,当您使用函数将print screen()或std :: cout打印出来时,线程可能会延迟,也就是说,当线程打印时,另一个线程写入内存因此在运行时间出现错误的可能性下降,但这并不意味着将来不存在。

当您使用OpenMP的一个循环,以保护写在同一个存储位置在不同的线程解决方案是:`

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