资讯
安全
论坛
下载
读书
程序开发
数据库
系统
网络
电子书
微信学院
站长学院
QQ
手机软件
考试
安全
|
web开发
|
软件开发
|
移动开发
|
数据库
|
网络
|
系统
|
网站
|
考试认证
|
其他
|
读书频道
>
网站
>
网页设计
>
Visual C++并行编程实战:多核架构下分工与协作的设计模式
2.3.1 提前退出循环
12-08-13
叶孤城
收藏
我要投稿
本文所属图书 >
Visual C++并行编程实战:多核架构下分工与协作的设计模式
这本书所介绍的并行模式库(Parallel Patterns Library,PPL)实际上是一个模式化的C++模版库,而且作为Visual Studio 2010开发系统的一部分,它已经完全被内置到了这一版本的C++语言中。这意味着你可以像使...
立即去当当网订购
在串行迭代中,退出循环的操作并不会令人感到陌生,而这类操作在并行循环中并不常见,但有时我们依然会用得着它。下面是一个串行情况下的做法:
int n = ...
for (int i = 0; i < n; i++)
{
// ...
if (/? stopping condition is true */)
break;
}
相比较而言,并行循环的情况会更复杂一些。因为其中往往会有不止一个步骤在同时运行,而且各步骤的执行顺序完全无法预知。但是,我们倒是可以通过取消任务组的方式来实现从一个并行循环中提前退出的效果。关于任务组,我们将会在第3章中详细介绍。
使用task_group::cancel方法可以帮助你提前退出一个并行循环。
下面是一段如何提前跳出并行循环的示范代码:
vector<double> results = ...
int workLoad = ...
task_group tg;
size_t fillTo = results.size() - 5 ;
fill(results.begin(), results.end(), -1.0);
task_group_status status = tg.run_and_wait([&]
{
parallel_for(0u, results.size(), [&](size_t i)
{
if (i > fillTo)
tg.cancel();
else
results[i] = DoWork(i, workLoad);
});
});
如你所见,如果想要提前退出一个并行循环,我们需要先为该循环建立一个任务组对象,然后让该循环在任务组内执行。这时候,如果你想退出循环,只需要调用该任务组的cancel方法即可。
不要忘了并行循环是无序执行的,所以取消一个并行循环时并不能确保位置更靠后的迭代操作没有先被运行。
但是和串行循环不一样的是,我们应该始终牢记并行循环中的步骤是无序执行的。因此当你取消一个并行循环任务组的时候,并不能保证没有更靠后的迭代在cancel被执行之前已经运行完成
点击复制链接 与好友分享!
回本站首页
分享到:
更多
您对本文章有什么意见或着疑问吗?请到
论坛讨论
您的关注和建议是我们前行的参考和动力
上一篇:
1.3 功能
下一篇:
1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
112 |
2.6 总结
112 |
2.5 unordered container无序容器
112 |
2.4 emplace_back减少内存拷贝和移动
112 |
2.3 forward和完美转发
112 |
2.2 move语义
112 |
2.1.2 右值引用优化性能,避免深拷贝
112 |
2.1.1 &&的特性
112 |
2.1 右值引用
3.2.3 Bootstrap栅格系统
3.4.4 自适应显示/隐藏页面内容
3.3.1 固定式布局
2.1.1 下载Bootstrap
3.3.2 流式布局
3.4.6 响应式Bootstrap
3.4.2 设计响应式图片
3.2.4 响应式Bootstrap栅格系统
文章
下载
读书
·
Win2000下关闭无用端口
·
禁止非法用户登录综合设置 [win9x篇]
·
关上可恶的后门——消除NetBIOS隐患
·
网络入侵检测系统
·
潜伏在Windows默认设置中的陷井
·
调制解调器的不安全
·
构建Windows 2000服务器的安全防护林
·
SQL Server 2000的安全配置
·
Windows优化大师注册机源码
·
Aspcode动画教程
·
WIN 2000服务器防止ICMP数据包攻击教程
·
实现网络隐身的简单方法
·
手工进行克隆帐号
·
用W32DASM破解网页合并器的密码
·
注册表操作动画教程
·
冰河陷阱v1.2
·
黑客攻防技术宝典:Web实战篇(第2版)
·
超级网管员——网络安全
·
代码大全(第二版)
·
软件之道:软件开发争议问题剖析
·
CSS插件工具箱
·
CSS入门经典(第3版)
·
C#并行编程高级教程:精通.NET 4 Pa
·
CMMI+敏捷整合开发
关于我们
|
联系我们
|
广告服务
|
投资合作
|
版权申明
|
在线帮助
|
网站地图
|
作品发布
|
Vip技术培训
版权所有:
红黑联盟
--致力于做最好的IT技术学习网站