-3
我安装了OpenCV 3.0.0。我的代码是使用OpenMP的多线程。多线程环境(OpenMP)中的OpenCV导致分段错误
每个线程访问相同的opencv函数(“convertTo”)。
这会导致分段错误。
误差不occurr
- 如果我在每个线程的开始或
- 打印使用std ::法院一个简单的声明,如果我只使用一个线程。
任何人都可以帮忙,原因可能是什么?
我安装了OpenCV 3.0.0。我的代码是使用OpenMP的多线程。多线程环境(OpenMP)中的OpenCV导致分段错误
每个线程访问相同的opencv函数(“convertTo”)。
这会导致分段错误。
误差不occurr
任何人都可以帮忙,原因可能是什么?
许多函数和数据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
}
是线程之间共享的垫目标? –
不,“convertTo”适用于不同的矩阵 –
您可以显示一些代码,以便重现错误? –