- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多线程并发访问无队列的算法研究
Vol. 3 No.8 / Aug. 2009
多线程并发访问无锁队列的算法研究
钱立兵 陈波 晏涛 徐云 孟金涛 刘涛
摘 要 FIFO队列是基本的、同时也研究最多的多线程并发数据机构之一。动态的内存分配实现并发无锁队列FIFO算法是
高效实用的算法,是有Michael and Scott提出(被称为MS-queue)。由Edya Ladan-Mozes和 Nir Shavit提出的新的并发
无锁FIFO队列算法进行研究,该算法是对MS-queue的改进,称为optimistic算法。MS-queue算法中的队列是用单链表表
示的,指针的插入操作使用了代价昂贵的compare-and-swap(CAS)操作,Optimistic算法关键思想:使用双链表表示队
列,用普通的、开销极低的store操作来插入指针,大大提高了算法的性能,尽管该算法在某些情况下可能会导致不一致性
问题,但可以定位问题并改正,采用消隐技术于FIFO数据机构中,并且在保持无锁与线性一致的情况下,能够扩放多线程
并发访问无锁队列性能。
关键词 CAS ;MS-queue算法;Optimistic算法;并发数据结构;FIFO:无锁;消隐
1 引言 现可扩放性而收引入的一种技术,Hendler等提出了
如何在消隐中引入退避机制,从而在保持线性一致
随着多核技术的发展,并行数据结构技术成 性的条件下实现了LIFO栈的可扩放性。
为一个研究热点,采用有锁访问会带来一定的开
消隐的工作机制,即让一对相反的操作,如入
销同时可能会产生死锁等,先进先出(FIFO)队列可
队出队,互相进行数据交换,而不用与中心数据结
以构建并发数据结构的基本块,如:Java并发包
构进行同步。直观地,这种技术最适合于LIFO顺序
JSR-166并发队列是一种可线性化、支持enqueue/
的数据结构,例如一个入栈操作与一个出栈操作正
dequeue操作的FIFO数据结构。本文讨论动态内
好配对直接交换数据,而无需进入中心的栈结构。
存分配实现的可线性化的多线程访问的无锁队列的
FIFO队列。 FIFO队列的实现就基于这种技术,一般地,在
低负载下,应更倾向于直接访问中心数据结构,因
Michael and Scott使用动态内存分配实现的并
为此时较难找到消隐对;而在高负载下应更倾向于
发无锁FIFO队列算法被认为是最高效和实用的算法
消隐,因为此时较易找到消隐对。利用消隐时,一
(被称为MS-queue)。在共享内存的多核处理器上,
个直观的方法是对中心队列引入退避机制,针对一
这种基于Compare-and-swap(CAS)的算法在性能
个共享无锁队列的实现上使用一个简单的“消隐数
上要远远优于以前基于锁的算法,并且已经被Java
并发包所采用。它的主要特点在于允许多线程并发 组”来支持退避模式。
的、无干扰的访问队列的头和尾。 2 MS-queue算法及改善后的算法
本文从最著名的基于动态内存分配的无锁FIFO
队列算法(MS-queue算法)出发,对最为有效
文档评论(0)