- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
-
9种可重复使用的并行数据构造和算法
目录
倒计数锁存(CountdownLatch)可重用旋转等待(SpinWait)屏障(Barrier)阻塞队列受限缓冲区(BoundedBuffer)Thin事件无锁定LIFO
堆栈循环分块并行分拆总结
本专栏并未涉及很多公共语言运行库(CLR)功能的机制问题,而是更多介绍了如何有
效使用您手头所具有的工具。身为一名程序员,必须做出很多决策,而选择正确的数据构造
和算法无疑是最常见的,也是最重要的决策之一。错误的选择可能导致程序无法运行,而大
多数情况下,则决定了性能的好坏。鉴于并行编程通常旨在改良性能,并且要难于串行编程,
因此所作的选择对您程序的成功就更为重要。
在本专栏中,我们将介绍九种可重复使用的数据构造和算法,这些构造和算法是许多并
行程序所常用的,您应该能够轻松将它们应用到自己的.NET软件中。专栏中每个例如随附
的代码都是可用的,但尚未经过完全定型、测试和优化。这里列举的模式虽然并不详尽,但
却代表了一些较为常见的模式。如您所见,很多例如都是互为补充的。
在开场前,我想还是先介绍一些相关内容。Microsoft®.NETFramework提供了几个
现有的并发基元。虽然我要为您讲解如何构建自己的基元,但实际上现有基元是足以应付大
多数情况的。我只是想说*些可选的方案有时也是有参考价值的。此外,了解这些技巧如何
应用于实际操作也有助于加深您对并行编程的整体理解。在开场讲解前,我假定您对现有基
元已经有了一个根本的了解。您也可以参阅MSDN®杂志2005年8月版的文章“关于多
线程应用程序:每个开发人员都应了解的内容〞,以全面了解其概念。
一、倒计数锁存(CountdownLatch)
Semaphore之所以成为并发编程中一种较为知名的数据构造,原因是多方面的,而并
不只是因为它在计算机科学领域有着悠久的历史〔可以追溯到19世纪60年代的操作系
统设计〕。Semaphore只是一种带有一个计数字段的数据构造,它只支持两种操作:放置
和取走〔通常分别称为P和V〕。一次放置操作会增加一个semaphore计数,而一次取
走操作会减少一个semaphore计数。当semaphore计数为零时,除非执行一项并发的放
置操作使计数变为非零值,否则任何后续的取走尝试都将阻塞〔等待〕。这两种操作均为不
可再分(atomic)操作,并发时不会产生错误,能够确保并发的放置和取走操作有序地进展。
Windows具有根底内核和对semaphore对象的Win32支持〔请参阅CreateSemaphore
和相关API〕,并且在.NETFramework中这些对象可以通过System.Threading.Semaphore
类公开到上层。Mute*和Monitor所支持的临界区,通常被认为是一种特殊的
semaphore,其计数会在0和1之间来回切换,换句话说,是一个二进制的semaphore。
.z.
-
另外还有一种“反向semaphore〞也是非常有用。也就是说,有时您需要数据构造能够
等待数据构造计数归零。Fork/join式并行模式在数据并行编程中是极为常见的,其中由单
个“主〞线程控制执行假设干“辅助〞线程并等待线程执行完毕。在这类情况下,使用反向
semaphore会很有帮助。大多数时候,您其实并不想唤醒线程来修改计数。因此在这种情
况下,我们将构造称为倒计数“锁存〞,用来表示计数的减少,同时还说明一旦设置为“Signaled
〞状态,锁存将保持“signaled〞〔这是一个与锁存相关的属性〕。遗憾的是,Windows
和.NETFramework均不支持这种数据构造。但令人欣慰的是,构建这种数据闭锁并不难。
要构建倒计数锁存,只需将其计数器初始值设为n,并
您可能关注的文档
最近下载
- 高分子复合材料第二章玻璃纤维详解演示文稿.ppt VIP
- 交互分配法习题.doc VIP
- Unit 1 People of Achievement 课件(共22张)人教版(2019)选择性必修第一册.pptx VIP
- 《OLED技术原理与应用》课件.ppt VIP
- 《计算机组装与维护》高职计算机全套教学课件.pptx
- 2025-2026部编人教版三年级语文上册(全册)测试卷(附答案).pdf VIP
- 客户关系管理:客户关系管理的相关策略PPT教学课件.pptx
- 重温三国历史,再现三国魅力.ppt VIP
- Unit3 My friends Part A let's learn(说课稿)-2024-2025学年人教PEP版英语四年级上册.docx VIP
- 海上光伏电站施工方案.docx VIP
文档评论(0)