2.3.2 异常处理

2013-10-07 15:22:02 · 作者: · 浏览: 81

2.3.2   异常处理

当一个并行循环中抛出未处理异常时,就不会再执行新的步骤了。但在默认情况下,异常抛出时正在运行的其他迭代操作仍将继续。一直到它们全部完成之后,该并行循环才会将异常上抛到调用它的线程中去。

抛出一个未处理异常可以阻止新的迭代操作开始。

由于循环运行在并行环境中,所以可能会发生不止一个异常。如果遇上这种情况,并行循环会随机抛出一个异常,而剩下的异常将不会被外界所察觉注6。

下面的代码示范了如何在并行循环中执行异常处理操作。

  1. vector<double> results = ...  
  2. try  
  3. {  
  4.     size_t n = results.size();  
  5.     parallel_for(0u, n, [&results](size_t i)  
  6.     {  
  7.         results[i] = DoWork(i, 10); // throws exception  
  8.     });  
  9. }  
  10. catch (ParallelForExampleException e)  
  11. {  
  12.     printf("Exception caught as expected.\n");