跳跃表与优先队列深入解析
1. 并发跳跃表概述
在并发环境下,有两种高效的跳跃表(SkipList)实现,它们都能在无需重新平衡的情况下实现对数级别的搜索。
- LazySkipList类 :
-
add()和remove()方法采用乐观细粒度锁机制。即方法在搜索目标节点时不进行锁定,仅在找到目标节点时获取锁并进行验证。 - 而
contains()方法通常是无等待的,这意味着调用该方法的线程不会被阻塞。 - LockFreeSkipList类 :
-
add()和remove()方法是无锁的,它基于之前提到的某种无锁列表类实现。 - 同样,
contains()方法也是无等待的。
下面通过一个具体的 contains(18) 调用示例来详细说明跳跃表的操作过程。假设跳跃表中有节点 9, 5, 18, 11, 25, 15, 8, 2, 3, 2, 1, 0 等。线程A调用 contains(18) ,从头节点的顶层开始遍历列表。
graph LR
A(头节点顶层) --> B(level 3: curr到
超级会员免费看
订阅专栏 解锁全文
34

被折叠的 条评论
为什么被折叠?



