没有合适的资源?快使用搜索试试~ 我知道了~
TBB并发容器 学习笔记
4星 · 超过85%的资源 需积分: 44 88 下载量 58 浏览量
2010-08-12
11:17:54
上传
评论 1
收藏 230KB DOCX 举报
温馨提示
试读
17页
TBB 并发容器 concurrent_queue concurrent_vector concurrent_hash_map TBB 并发容器 concurrent_queue concurrent_vector concurrent_hash_map TBB 并发容器 concurrent_queue concurrent_vector concurrent_hash_map
资源推荐
资源详情
资源评论
TBB 并发容器
1. 引言
几年之前, 的性能还主要取决于 的主频,经过超摩尔定律的发展后,没过多
长时间 的主频速度就已接近“极限”,使得单单靠提高 的主频来提升性能变得非常
困难。
目前,、 等 生产商都转而采用了多核技术来提升 性能,甚至提出了
群核 的概念。这意味着,要充分发挥多核 的性能,程序就必须采用多线程并发计
算的方式,传统的串行程序将会极大地浪费多核 的运算能力!
是上世纪 年代诞生的语言,它的前身是同样风靡全球的 语言。一直以来它都以代
码效率卓越著称,进入多核时代后,因为 标准库没有提供多线程支持,要用 开发出
充分利用多核 的程序将面临很大挑战。
于是,在 社区出现了不少优秀的库以支持并行编程,如各种跨平台的线程库 ,
, 等 。 另 一 方 面 , 微 软 也 从 开 始 不 断 地 加 入 线 程 池 ( 如
), 标准也明确地表示要加入多线程的支持。
是目前比较流行的 并行编程方式,它通过在代码中插入专用的 编译指
令来指示编译器把串行代码编译成并行程序。
它的优点是易于使用,几乎不用修改原代码就可对老程序进行并发支持的改造。问题是
它必须要有编译器的支持,尽管目前不少编译器都提供了 的支 持,但它毕竟不是
的一部分,甚至它都不是真正意义上的 库。使用 的 代码看上去总是有
些怪异(个人观点 ! )。
现在,我们又有了一个新选择:"#$%$%&("%%,线程构建模块)。"%%
是一个开源的 模板库,能够运行在 $'、()、&# 以及 *+ 等系统上,
只要是标准的 编译器都可以使用它。
2. TBB
2.1TBB 的优点
"%% 是一个 的并行编程模板库,它能使你的程序充分利用多核 的性能优势。具
体功能和优势如下表:
2.1.1 使用 TBB
"%% 简单易学,和 ,"( 类似。为了突出 "%% 的简单易学、并行编程的高效,增强学习的信心
与兴趣。我们来举个简单的例子:并行循环(!-):
!"#"$#
"%"#&%"#''#
处理比较耗时的操作,这里用暂停 来模拟
(")**#
+
+
+
",-!./#
01023,43
5用并行循环输出 *6785
23%93:"#
""*,;*#,#
43%93:"#
5耗时"#8543623
5用传统循环处理相同的操作85
23%93:"#
"%*;*''#
(")**#
+
43%93:"#
5耗时"#8543623
+
在我的双核 下,传统方法耗时 ./而并行循环耗时 .。且并行循环输出的为
乱续,说明循环被并行处理了。
2.2TBB 并发容器
2.2.1STL 容器的缺点
许多开发者依靠手工编写容器类或使用由 标准模板库(,"()实现的容器类,可惜
的是,这些库大多数都不是线程安全的,具体来说,当在多线程代码中使用 ,"( 时,,"( 规
范中并未提及线程或容器类的行为,因此,这些 ,"( 容器类的实现一般都不是线程安全的。
口说无凭,下面请判断使用 ,"(0/12之后的值:
<
<<<<<<<<即便与两个不同的 1 相关联的两个 3 在上述代码中被修改之后,大多数 ,"( 实
现也并未对正确性提供任何保证,如果同时执行这些操作又未进行同步,很可能会破坏
,又因为未对线程安全性有任何要求,访问两个不同的 都有可能导致数据损坏。
<<<<<<<<当然了,也可以另一种方式实现 ,"( 模板类来保证上述代码的线程安全,不巧的
是,某些常用 操作的顺序并不是以一种线程友好的方式来实现的,此时,当每个单独
的操作为线程安全时,代码中的顺序操作可能会导致不确定的结果,例如,如果两个线程
操作了以下代码 中的同一元素:
<
<<<<<<<<由 "#$ 执行的代码进行了两项操作:一是它调用了操作符 45以返回一个对
“167相联对象的引用,如果这个 1 不在 中,操作符 45会为与此 1 相联的 1
类型对象分配空间;二是操作符 8被调用以复制 1 的临时实例到由引用指向的对象
中。
<<<<<<<<所期望的结果是,要么“167不在 中,要么它与 19:的一个实例成对出现。
但是如果没有用户干预的同步,即便每个操作符本身是线程安全的,都会有可能出现其他
的结果。由 "#$6 调用的 方法可能会在 "#$ 中对操作符 45及 8的调用之间出
剩余16页未读,继续阅读
wudizuijimo
- 粉丝: 11
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- F103-霸道开发板2.8寸电阻触摸屏例程.rar
- Google(高德)地图瓦片python代码下载
- Python实现输出杨辉三角形
- polsarpro官方教程、操作说明 PolSARpro v5.0 Software Training Course
- STM32 TouchGFX的使用二图片显示
- buildx镜像文件,也可以通过网上其他方式获取
- 【中级软件设计师】上午题12-软件工程(2):单元测试、黑盒测试、白盒测试、软件运行与维护
- 免费计算机毕业设计-医院住院管理系统的设计与实现(包含代码+论文)
- tt100k数据转换yolo格式
- 免费计算机毕业设计-学生在线网络考试系统的设计与实现(包含论文+源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页