33、基于锁的并发跳表:LazySkipList 类深入解析

基于锁的并发跳表:LazySkipList 类深入解析

1. 跳表基础操作概述

在跳表中,添加和删除节点是常见操作。添加节点时, find() 方法会填充 preds[] succs[] 数组,记录目标节点的前后节点信息。之后创建新节点,并将其链接到前后节点之间。例如,要添加键为 12 的节点, find() 方法会遍历跳表,确定其前后节点,然后将新节点插入相应位置。

删除节点时,同样使用 find() 方法初始化目标节点的 preds[] succs[] 数组。接着,通过重定向每个前驱节点的 next 引用,将目标节点从所有层级的列表中移除。

2. LazySkipList 类概述

LazySkipList 类是一种并发跳表设计,它基于 LazyList 算法。在这个类中,跳表的每一层都是一个 LazyList。 add() remove() 方法采用乐观细粒度锁,而 contains() 方法是无等待的。

每个节点都有自己的锁和一个 marked 字段,用于表示该节点是否在抽象集合中,或者是否已被逻辑删除。算法始终维护跳表属性,即高层级列表始终包含在低层级列表中。

为了维护跳表属性,在添加或删除节点时,使用锁来防止节点附近的结构发生变化,并延迟对节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值