-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」適用於不同的矩陣 –
您可以顯示一些代碼,以便重現錯誤? –