设为首页 加入收藏

TOP

2.3.2 异常处理
2013-10-07 15:22:02 来源: 作者: 【 】 浏览:70
Tags:2.3.2 异常 处理

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");  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.3.1 提前退出循环 下一篇2.2.3 性能对比

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: