2012-05-03 30 views
3

在並行區域內使用「拋出異常」會很好嗎?在並行區域內使用「拋出異常」很好嗎?

當一個線程拋出異常時,其餘線程會發生什麼?

代碼:

#pragma omp parallel for 
for(int i = 0; i < n; i++) 
{ 
    if(arr[i] < 0) 
     throw BadParameter("bad array value"); 
} 

回答

5

並行區域內執行的擲必須使執行同一併行區域內恢復,並且它必須通過拋出異常同一線程被捕獲。

否則它會傳播到未處理的異常。

+0

這是正確的,但很煩人。這是否會克服(在下一個openmp版本)?如果存在並行區域*和* ThrowGuard類型的對象,我使用助手類來引發異常,並且它不會拋出(但帶有致命錯誤退出)。 – Walter

+0

@Walter,你會期待未來的OpenMP在這種情況下的正確行爲? –