2016-03-08 95 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 
}