是否有人知道任何支持排名操作的无锁跳过列表推荐和/或研究论文(即找到第k个元素)?或者,是否有人意识到这种操作永远不会起作用的根本原因?
加分:
不承担垃圾收集的实施。根据我的经验,相当多的研究论文忽略了内存管理。
支持:
有关如何在常规跳过列表中完成排名操作的说明:William Pugh的“A Skip List Cookbook”
对于一个更好的无锁跳过列表描述:Keir Fraser的“实用锁定自由”
更好的无锁跳过清单之一:http://www.1024cores.net/home/parallel-computing/concurrent-skip-list
答案 0 :(得分:1)
与 key , value 和 level 不同,它们是跳过列表中元素的本地属性,不受其他元素操作的影响,元素的 rank ,即它在列表中的位置,是随着插入和删除具有较低等级的元素而改变的属性。因此,对于并发跳转列表,元素的等级是非常短暂的,因为它可以在任何时刻通过插入或删除较低等级元素的并发运行操作进行更改。
例如,假设您通过级别1列表对 k -th元素进行线性搜索。在您执行 k 步骤的那一刻,并发修改可能会添加或删除任意数量的先前元素,因此您找到的元素的当前等级实际上是未知的。此外,当线程执行 k 前向迭代时,可以在其当前位置与开始搜索时 k -th的元素之间进行并发更改。因此,搜索结束时既不是当前等级为 k 的元素,也不是搜索开始时等级为 k 的元素。这只是一些随机元素!
简而言之,对于并发列表,元素的等级是一个定义不明确的概念,按等级搜索是一个定义不明确的操作。这是它永远无法工作的根本原因,以及为什么实施者永远不应该为提供这样的操作而烦恼。