3
在並行區域內使用「拋出異常」會很好嗎?在並行區域內使用「拋出異常」很好嗎?
當一個線程拋出異常時,其餘線程會發生什麼?
代碼:
#pragma omp parallel for
for(int i = 0; i < n; i++)
{
if(arr[i] < 0)
throw BadParameter("bad array value");
}
在並行區域內使用「拋出異常」會很好嗎?在並行區域內使用「拋出異常」很好嗎?
當一個線程拋出異常時,其餘線程會發生什麼?
代碼:
#pragma omp parallel for
for(int i = 0; i < n; i++)
{
if(arr[i] < 0)
throw BadParameter("bad array value");
}
並行區域內執行的擲必須使執行同一併行區域內恢復,並且它必須通過拋出異常同一線程被捕獲。
否則它會傳播到未處理的異常。
這是正確的,但很煩人。這是否會克服(在下一個openmp版本)?如果存在並行區域*和* ThrowGuard類型的對象,我使用助手類來引發異常,並且它不會拋出(但帶有致命錯誤退出)。 – Walter
@Walter,你會期待未來的OpenMP在這種情況下的正確行爲? –