基于锁的并发跳表:LazySkipList 类深入解析
1. 跳表基础操作概述
在跳表中,添加和删除节点是常见操作。添加节点时, find() 方法会填充 preds[] 和 succs[] 数组,记录目标节点的前后节点信息。之后创建新节点,并将其链接到前后节点之间。例如,要添加键为 12 的节点, find() 方法会遍历跳表,确定其前后节点,然后将新节点插入相应位置。
删除节点时,同样使用 find() 方法初始化目标节点的 preds[] 和 succs[] 数组。接着,通过重定向每个前驱节点的 next 引用,将目标节点从所有层级的列表中移除。
2. LazySkipList 类概述
LazySkipList 类是一种并发跳表设计,它基于 LazyList 算法。在这个类中,跳表的每一层都是一个 LazyList。 add() 和 remove() 方法采用乐观细粒度锁,而 contains() 方法是无等待的。
每个节点都有自己的锁和一个 marked 字段,用于表示该节点是否在抽象集合中,或者是否已被逻辑删除。算法始终维护跳表属性,即高层级列表始终包含在低层级列表中。
为了维护跳表属性,在添加或删除节点时,使用锁来防止节点附近的结构发生变化,并延迟对节
超级会员免费看
订阅专栏 解锁全文

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



