环形单链表的处理方法和装置制造方法及图纸

技术编号:38863573 阅读:14 留言:0更新日期:2023-09-17 10:04
本公开涉及一种环形单链表的处理方法和装置,涉及环形单链表领域。其中的方法包括:响应于接收到对环形单链表的处理请求,根据处理请求,确定目标节点;根据目标节点在环形单链表中的位置,确定目标节点的指针位置;根据处理请求的类型以及指针位置的确定时刻,修改环形单链表的指针。应用本公开可以实现无锁处理环形单链表。环形单链表。环形单链表。

【技术实现步骤摘要】
环形单链表的处理方法和装置


[0001]本申请涉及计算机
,具体涉及环形链表领域,尤其涉及一种环形单链表的处理方法和装置。

技术介绍

[0002]环形单链表是一种通用的数据结构,支持高效插入/删除和遍历。相对数组,其缺点是不支持指定索引直接访问,其优点是动态容量,无需提前分配容器空间。
[0003]面对多核并行场景,多线程/多进程使用单链表时,会触发数据访问竞争。传统的多线程/多进程编程主要依赖比较“重”的各种锁操作来进行资源的并发保护,比如,在Linux下,信号量和线程互斥锁的实现都是通过futex系统调用实现,可能会引发进程/线程进入休眠状态,无法适应高速处理场合。

技术实现思路

[0004]本公开的实施例提供了一种环形单链表的处理方法和装置。
[0005]第一方面,本公开的实施例提供了一种环形单链表的处理方法,包括:响应于接收到对环形单链表的处理请求,根据处理请求,确定目标节点;根据目标节点在环形单链表中的位置,确定目标节点的指针位置;根据处理请求的类型以及指针位置的确定时刻,修改环形单链表的指针。
[0006]第二方面,本公开的实施例提供了一种环形单链表的处理装置,包括:节点确定单元,被配置成响应于接收到对环形单链表的处理请求,根据处理请求,确定目标节点;指针修改单元,被配置成根据目标节点在环形单链表中的位置,确定目标节点的指针位置;节点处理单元,被配置成根据处理请求的类型以及指针位置的确定时刻,修改环形单链表的指针。
[0007]应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
[0008]附图用于更好地理解本方案,不构成对本公开的限定。其中:
[0009]图1为本公开的环形单链表的处理方法的一个实施例的流程示意图;
[0010]图2为本公开的环形单链表的处理方法的另一个实施例的流程示意图;
[0011]图2a~图2f为向环形单链表中增加节点的示意图;
[0012]图3为本公开的环形单链表的处理方法的又一个实施例的流程示意图;
[0013]图3a~图3d为删除环形单链表中节点的示意图;
[0014]图4为本公开的环形单链表的处理方法的另一个实施例的流程示意图;
[0015]图4a~图4c为更新环形单链表中节点的示意图;
[0016]图5为本公开的环形单链表的处理装置的一个实施例的结构示意图。
具体实施方式
[0017]应该指出,以下详细说明都是示例性的,旨在对本公开提供进一步的说明。除非另有指明,本文中使用的所有技术和科学术语具有与本公开所属
的普通技术人员通常理解的相同含义。
[0018]需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0019]在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
[0020]为使本公开的技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本公开作进一步详细的说明。
[0021]图1示出了本公开的环形单链表的处理方法的一个实施例的流程100。
[0022]如图1所示,本实施例的环形单链表的处理方法可以包括以下步骤:
[0023]步骤101,响应于接收到对环形单链表的处理请求,根据所述处理请求,确定目标节点。
[0024]本实施例中,环形单链表的处理方法的执行主体可以接收针对环形单链表的处理请求。此处理请求可以是写者发送的,也可以是读者发送的。写者可以向环形单链表写入数据、删除数据或者更新数据。读者可以读取环形单链表中的数据。
[0025]执行主体在接收到上述处理请求后,可以确定目标节点。可以理解的是,处理请求中可以包括用于表示处理请求的类型的字段,还可以包括用于表示节点标识的字段。执行主体可以通过上述用于表示节点标识的字段确定目标节点。
[0026]步骤102,根据目标节点在环形单链表中的位置,确定目标节点的指针位置。
[0027]执行主体在确定目标节点后,可以确定目标节点的位置。具体的,执行主体可以根据处理请求中的字段来确定目标节点在环形单链表中的位置。如果处理请求是数据增加请求,此位置可以是目标节点待插入的位置,即期望位置。如果处理请求是数据删除请求,此位置可以是待删除的目标节点所在的位置,即当前位置。
[0028]执行主体可以进一步根据上述位置,确定目标节点的指针位置。具体的,如果处理请求是数据删除请求,可以将目标节点的前置节点的指针指向后置节点。如果是数据增加请求,可以将目标节点的指针指向后置节点。
[0029]步骤103,根据处理请求的类型以及指针位置的确定时刻,修改环形单链表的指针。
[0030]执行主体可以记录指针位置的修改时刻,并自该修改时刻起计时。同时结合处理请求的类型,对环形单链表的指针进行修改。具体的,执行主体可以首先确定在环形单链表中,目标节点的前置节点和后置节点。如果处理请求为数据增加请求,可以直接在上述确定时刻之时或之后,将目标节点的指针指向后置节点,将前置节点的指针指向目标节点。如果处理请求为数据删除请求或数据更新请求,可以自上述确定时刻起经过预设时长后再将目标节点的指针删除。这里,预设时长可以理解为宽限期,在宽限期内,读者仍然可以读取目标节点中的数据,也可以通过这个目标节点继续遍历环形单链表中的数据。
[0031]需要说明的是,本实施例中的步骤103是在步骤102执行完成之后再执行的。在具
体的代码实现中,需要通过内存栅栏操作实现。这样可以防止CPU的乱序执行。
[0032]本公开的上述实施例提供的环形单链表的处理方法,可以通过无锁操作实现对环形单链表的数据处理。
[0033]继续参见图2,其示出了根据本公开的环形单链表的处理方法的另一个实施例的流程200。如图2所示,本实施例中的方法可以包括以下步骤:
[0034]步骤201,响应于接收到对环形单链表的数据添加请求,从预设的节点池中选取已被释放的空闲节点作为目标节点。
[0035]本实施例中,执行主体如果接收到针对环形单链表的数据添加请求,即需要在环形单链表中增加一个数据节点。这时需要选取一个空闲节点,用于存储需要增加的数据。这里,可以从预设的节点池中选取一个空闲节点。预设的节点池可以用于存储有效节点,这里有效节点是指可使用的节点。节点池的容量可以大于环形单链表中节点数量的上限M个节点。节点池支持FIFO(先入先出)行为。即,先被释放的对象(归还给节点池),会先被申请(从节点池获取)。这样可以确保每个被释放的旧节点被重新申请前,必然有至少M个可用的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种环形单链表的处理方法,包括:响应于接收到对环形单链表的处理请求,根据所述处理请求,确定目标节点;根据所述目标节点在所述环形单链表中的位置,确定所述目标节点的指针位置;根据所述处理请求的类型以及所述指针位置的确定时刻,修改所述环形单链表的指针。2.根据权利要求1所述的方法,其中,所述处理请求包括数据添加请求;以及所述根据所述处理请求,确定目标节点,包括:选取已被释放的空闲节点作为目标节点,向所述目标节点中写入数据。3.根据权利要求2所述的方法,其中,所述根据所述目标节点在所述环形单链表中的位置,确定所述目标节点的指针位置,包括:根据所述目标节点在所述环形单链表中的位置,确定所述目标节点的前置节点和后置节点;将所述目标节点的指针指向后置节点。4.根据权利要求3所述的方法,其中,所述根据所述处理请求的类型以及所述指针位置的确定时刻,修改所述环形单链表的指针,包括:响应于确定所述处理请求为数据添加请求,在所述确定时刻之时或之后,将所述目标节点的前置节点的指针指向所述目标节点。5.根据权利要求1所述的方法,其中,所述处理请求包括数据删除请求;以及所述根据所述目标节点在所述环形单链表中的位置,确定所述目标节点的指针位置,包括:根据所述目标节点在所述环形单链表中的位置,确定所述目标节点的前置节点和后置节点;...

【专利技术属性】
技术研发人员:刘靖非严俊
申请(专利权)人:北京百卓网络技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1