9种可重复使用的并行数据结构和算法目录倒计数锁存(CountdownLatch)可重用旋转等待(SpinWait)屏障(Barrier)阻塞队列受限缓冲区(BoundedBuffer)Thin事件无锁定LIFO堆栈循环分块并行分拆总结本专栏并未涉及很多公共语言运行库(CLR)功能的机制问题,而是更多介绍了如何有效使用您手头所具有的工具
身为一名程序员,必须做出很多决策,而选择正确的数据结构和算法无疑是最常见的,也是最重要的决策之一
错误的选择可能导致程序无法运行,而大多数情况下,则决定了性能的好坏
鉴于并行编程通常旨在改进性能,并且要难于串行编程,因此所作的选择对您程序的成功就更为重要
在本专栏中,我们将介绍九种可重复使用的数据结构和算法,这些结构和算法是许多并行程序所常用的,您应该能够轻松将它们应用到自己的
NET软件中
专栏中每个示例随附的代码都是可用的,但尚未经过完全定型、测试和优化
这里列举的模式虽然并不详尽,但却代表了一些较为常见的模式
如您所见,很多示例都是互为补充的
在开始前,我想还是先介绍一些相关内容
Microsoft®
NETFramework提供了几个现有的并发基元
虽然我要为您讲解如何构建自己的基元,但实际上现有基元是足以应付大多数情况的
我只是想说某些可选的方案有时也是有参考价值的
此外,了解这些技巧如何应用于实际操作也有助于加深您对并行编程的整体理解
在开始讲解前,我假定您对现有基元已经有了一个基本的了解
您也可以参阅《MSDN®杂志》2005年8月版的文章“关于多线程应用程序:每个开发人员都应了解的内容”,以全面了解其概念
一、倒计数锁存(CountdownLatch)Semaphore之所以成为并发编程中一种较为知名的数据结构,原因是多方面的,而并不只是因为它在计算机科学领域有着悠久的历史(可以追溯到19世纪60年代的操作系统设计)