可重复使用的并行数据结构及算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
可重复使用的并行数据结构及算法

9 种可重复使用的并行数据结构和算法 目录  HYPERLINK /zh-cn/magazine/cc163427.aspx \l S1#S1 倒计数锁存 (Countdown Latch)  HYPERLINK /zh-cn/magazine/cc163427.aspx \l S2#S2 可重用旋转等待 (Spin Wait)  HYPERLINK /zh-cn/magazine/cc163427.aspx \l S3#S3 屏障 (Barrier)  HYPERLINK /zh-cn/magazine/cc163427.aspx \l S4#S4 阻塞队列  HYPERLINK /zh-cn/magazine/cc163427.aspx \l S5#S5 受限缓冲区 (Bounded Buffer)  HYPERLINK /zh-cn/magazine/cc163427.aspx \l S6#S6 Thin 事件  HYPERLINK /zh-cn/magazine/cc163427.aspx \l S7#S7 无锁定 LIFO 堆栈  HYPERLINK /zh-cn/magazine/cc163427.aspx \l S8#S8 循环分块  HYPERLINK /zh-cn/magazine/cc163427.aspx \l S9#S9 并行分拆  HYPERLINK /zh-cn/magazine/cc163427.aspx \l S10#S10 总结 本专栏并未涉及很多公共语言运行库 (CLR) 功能的机制问题,而是更多介绍了如何有效使用您手头所具有的工具。身为一名程序员,必须做出很多决策,而选择正确的数据结构和算法无疑是最常见的,也是最重要的决策之一。错误的选择可能导致程序无法运行,而大多数情况下,则决定了性能的好坏。鉴于并行编程通常旨在改进性能,并且要难于串行编程,因此所作的选择对您程序的成功就更为重要。 在本专栏中,我们将介绍九种可重复使用的数据结构和算法,这些结构和算法是许多并行程序所常用的,您应该能够轻松将它们应用到自己的 .NET 软件中。专栏中每个示例随附的代码都是可用的,但尚未经过完全定型、测试和优化。这里列举的模式虽然并不详尽,但却代表了一些较为常见的模式。如您所见,很多示例都是互为补充的。 在开始前,我想还是先介绍一些相关内容。Microsoft? .NET Framework 提供了几个现有的并发基元。虽然我要为您讲解如何构建自己的基元,但实际上现有基元是足以应付大多数情况的。我只是想说某些可选的方案有时也是有参考价值的。此外,了解这些技巧如何应用于实际操作也有助于加深您对并行编程的整体理解。在开始讲解前,我假定您对现有基元已经有了一个基本的了解。您也可以参阅《MSDN? 杂志》2005 年 8 月版的文章“ HYPERLINK /msdnmag/issues/05/08/Concurrency 关于多线程应用程序:每个开发人员都应了解的内容”,以全面了解其概念。 一、倒计数锁存 (Countdown Latch) Semaphore 之所以成为并发编程中一种较为知名的数据结构,原因是多方面的,而并不只是因为它在计算机科学领域有着悠久的历史(可以追溯到 19 世纪 60 年代的操作系统设计)。Semaphore 只是一种带有一个计数字段的数据结构,它只支持两种操作:放置和取走(通常分别称为 P 和 V)。一次放置操作会增加一个 semaphore 计数,而一次取走操作会减少一个 semaphore 计数。当 semaphore 计数为零时,除非执行一项并发的放置操作使计数变为非零值,否则任何后续的取走尝试都将阻塞(等待)。这两种操作均为不可再分 (atomic) 操作,并发时不会产生错误,能够确保并发的放置和取走操作有序地进行。Windows具有基础内核和对 semaphore 对象的 Win32支持(请参阅 CreateSemaphore 和相关 API),并且在 .NET Framework 中这些对象可以通过 System.Threading.Semaphore 类公开到上层。Mutex 和 Monitor 所支持的临界区,通常被认为是一种特殊的 semaphore,其计数会在 0 和 1 之间来回切换,换句话说,是一个二进制的 semaphore。 另外还有一种“反向 semaphore”也是非常有用。也就是说,有时您需要数据结构能够等待数据结构计数归零。Fork/join 式并行模式在数据并行编程中是极为常见的,其中由单个“主”线程控制执行若干“辅助”线程并等待线程执行完毕。在这类情况下,使用反向

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档