CN104572432A - 一种无锁链表管理装置 - Google Patents
一种无锁链表管理装置 Download PDFInfo
- Publication number
- CN104572432A CN104572432A CN201310512207.2A CN201310512207A CN104572432A CN 104572432 A CN104572432 A CN 104572432A CN 201310512207 A CN201310512207 A CN 201310512207A CN 104572432 A CN104572432 A CN 104572432A
- Authority
- CN
- China
- Prior art keywords
- chained list
- order
- module
- newly
- built
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种无锁链表管理装置,包括命令区分模块、新建存储模块以及链表操作模块,其中,命令区分模块,用于区分链表节点命令的命令类型,提取出新建链表节点命令;新建存储模块,用于存储命令区分模块提取出的新建链表节点命令;链表操作模块,用于从存储模块中逐个调取新建链表节点命令以及区分模块输出的其他命令进行处理。本发明利用新建存储模块存储新建链表节点命令,保证链表操作流水线上只有一个新建链表节点命令,避免了出现链表节点被替换而导致链表建立错误的问题。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种无锁链表管理装置。
背景技术
链表(Linked list)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
链表是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。
由于在可编程逻辑器件设计中,存储资源有限,链表数据存储结构因为其灵活性已被大量的使用。但是,可编程逻辑器件设计为多为流水线设计结构,那么就有同一时刻在同一条链表上添加两个或以上节点的可能性。为了保证链表结构的正确性,在添加链表节点时,必须保证同一条链表同时只能操作一个节点。
目前,实现同一条链表上只能同时操作一个节点,一般的实现方法是使用加锁机制管理链表。对于一个高性能的,需要经常进行大规模运算的系统,流水线结构是提高逻辑吞吐量从而增强计算性能的一个重要办法。而流水线结构要求流水线上的数据能够流动起来,这样吞吐量才能达到满意的效果,但是通过加锁来避免链表建立错误的办法,就会经常打断流水线操作。并且,加锁操作还会影响流水线上的本节点之后的节点,从而严重降低系统的吞吐量。
发明内容
有鉴于此,本发明提供一种无锁链表管理装置,包括命令区分模块、新建存储模块以及链表操作模块,其中:
命令区分模块,用于区分链表节点命令的命令类型,提取出新建链表节点命令;
新建存储模块,用于存储命令区分模块提取出的新建链表节点命令;
链表操作模块,从存储模块中逐个调取新建链表节点命令并进行处理。
进一步地,命令区分模块中提取新建链表节点命令之前还包括去冗余模块,用于将接收到的链表节点命令中重复的命令聚合为一个命令,以确保每个命令都是唯一的。
进一步地,在去冗余模块接收到链表节点命令之前包括,将进入链表流水线的链表节点命令分组发送至去冗余模块。
优选地,对比组内链表节点的命令,当多个链表节点命令的命令类型和节点符号同时相同时则为重复的命令。
进一步地,命令类型为新建链表节点命令、删除链表节点命令、查找链表节点命令以及更新链表节点命令。
本发明在管理链表时不需要加锁操作,保证链表操作流水线上只有一个链表新建命令,直接让链表节点进入链表操作的流水线上,将流水线的动作流动起来,达到系统理想的吞吐量性能。利用新建存储模块存储新建链表节点命令,避免了在无锁的链表管理机制下有多个用户同时新建链表节点时,出现链表节点被替换而导致链表建立错误的问题。
附图说明
图1是本发明实施例中无锁链表管理装置的结构示意图;
图2是本发明实施例中无锁链表管理装置逻辑流程图;
图3是本发明实施例中无锁链表管理装置执行流程图。
具体实施方式
目前的可编程逻辑器件设计多为流水线设计结构,以FPGA为例,当有多人同时对一条链表进行链表节点命令的操作时,就有同一时刻在同一条链表上添加两个或两个以上节点的可能性,则会导致多个节点同时添加在同一条链表的同一个位置,那么就会发生之前的节点会被之后的节点替换,从而致使链表建立错误。为了保证链表结构的正确性,在添加链表节点时,必须保证同一条链表同时只能操作一个节点,一般的实现方法是使用加锁机制管理链表。具体实现为:当有用户对链表节点进行操作时,首先对该链表进行加锁,以链表头地址为关键词做一个加锁操作,加锁成功后才能对该链表进行链表节点命令的操作,对链表节点的命令操作完成后对该链表解锁,此时才可以处理下一个节点。如有其它用户在此期间也需对该链表进行链表节点的命令操作时,由于该链表已经加锁,所以无法对该链表进行操作,只能待上一个节点命令解锁后方可对其进行操作。对于一个高性能的,需要经常进行大规模运算的系统,流水线结构是提高逻辑吞吐量从而增强计算性能的一个重要办法。而流水线结构要求流水线上的数据能够流动起来,这样吞吐量才能达到满意的效果。但是,通过使用加锁方法来管理链表,虽然避免了链表建立错误的办法,却会经常打断流水线操作,并且还会影响流水线上的本节点之后的节点,从而严重降低系统的吞吐量。
本发明提供一种新的链表管理机制解决以上问题,在优选的实施方式中,本发明提供一种无锁链表管理装置,请参考图1,该装置包括命令区分模块、新建存储模块以及链表操作模块,通过对进入链表操作流水线上的节点数据进行预处理,并且增加一个新建存储模块,储存新建链表节点的命令,达到不需要加锁操作就能保证链表建立正确的方法。如图2所示,该装置在运行过程中执行如下处理流程:
步骤201,命令区分模块区分链表节点命令的命令类型,提取出新建链表节点命令;
步骤202,新建存储模块储存命令区分模块提取出的新建链表节点命令;
步骤203,链表操作模块从新建存储模块中调取新建链表节点命令并逐个处理。
请参考图3,在本发明中,为了保证去冗余模块的有效进行,首先将进入链表操作流水线的待操作链表节点的命令进行分组,优选地以16个命令为一组输入去冗余模块,当然也可以不满16个或多于16个,该参数可自行设定。去冗余模块接收到此16个一组的链表节点命令后,对比该组命令的命令类型和节点符号。链表节点的命令类型分为以下几种:添加节点命令、删除节点命令、更新节点命令以及查找节点命令。当两个或多个待操作链表节点命令的命令类型和节点符号同时相同时则为重复的命令,当检测到重复的命令时去冗余模块则将相同的命令丢掉或者聚合至仅剩下一个,保证一组命令通过去冗余模块后,每一个命令在组内都是唯一的命令。
例如,将进入链表操作流水线的链表节点命令,为提高工作效率以16个链表节点命令分为一组输入去冗余模块,我们将16个链表节点命令分别命名为:A1,B1,C1,D1,E1,F1,G1,A1,A1,B1,B2,C1,D1,A1,G1,E1。其中数字代表命令类型,字母代表节点符号,那么,这16个命令通过去冗余模块后,将相同的命令丢掉或者聚合为1个,结果只剩下A1,B1,B2,C1,D1,E1,F1,G1等8个组内无重复的命令。
当有多个用户同时在一条链表上添加新的链表节点时,节点指针可能会同时指向链表的同一个节点位置,此时就会出现多个新建链表节点占用一个链表中节点位置的情况,那么就会发生之前的新建链表节点会被之后的新建链表节点替换,从而造成链表建立错误。在本发明中相应新增加一个单独的新建存储模块,用于储存新建链表节点的命令,新建链表节点命令又为添加链表节点的命令。在存储新建链表节点命令之前,命令区分模块将去冗余模块输出的无重复的链表节点命令进行分类,把新建链表节点的命令单独提出,放入单独的新建存储模块,等待被调用;此时除新建链表节点命令外的其他链表节点命令则可以直接逐个处理,以保证流水线的连续性,新建链表节点命令则从新建存储模块中逐个调取处理。需要注意的是,在链表操作模块中,在一个链表节点命令处理完成后才可调用下一个命令,根据进入流水线的先后顺序逐个处理链表节点命令。
综上所述,本发明实施例提供的无锁链表在执行新建链表节点操作时较现有技术相比,需要额外的增加一个新建存储模块,将经过区分链表节点命令类型后获知的新建链表节点提取出来储存于新增的新建存储模块,再逐个调取进行处理。从而使得链表不需要加锁操作,直接让节点进入链表操作的流水线上,将流水线的动作流动起来,达到系统理想的吞吐量性能。还避免了在无锁的链表管理机制下有多个用户同时新建链表节点时,出现链表节点被替换而导致链表建立错误的问题。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (6)
1.一种无锁链表管理装置,包括命令区分模块、新建存储模块以及链表操作模块,其特征在于:
命令区分模块,用于区分链表节点命令的命令类型,提取出新建链表节点命令;
新建存储模块,用于存储命令区分模块提取出的新建链表节点命令;
链表操作模块,从存储模块中逐个调取新建链表节点命令并进行处理。
2.如权利要求1所述的装置,其特征在于,所述命令区分模块中提取新建链表节点命令之前还包括去冗余模块,用于将接收到的链表节点命令中重复的命令聚合为一个命令,以确保每个命令都是唯一的。
3.如权利要求2所述的装置,其特征在于,在去冗余模块接收到链表节点命令之前进一步包括,将进入链表流水线的链表节点命令分组发送至去冗余模块。
4.如权利要求2所述的装置,其特征在于,所述去冗余模块具体用于,对比组内链表节点的命令,当多个链表节点命令的命令类型和节点符号同时相同时则为重复的命令。
5.如权利要求1所述的装置,其特征在于,所述命令类型包括新建链表节点命令、删除链表节点命令、查找链表节点命令以及更新链表节点命令。
6.如权利要求1所述的装置,其特征在于,所述链表操作模块进一步用于,逐个处理其他类型的链表节点命令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310512207.2A CN104572432B (zh) | 2013-10-24 | 2013-10-24 | 一种无锁链表管理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310512207.2A CN104572432B (zh) | 2013-10-24 | 2013-10-24 | 一种无锁链表管理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104572432A true CN104572432A (zh) | 2015-04-29 |
CN104572432B CN104572432B (zh) | 2018-09-04 |
Family
ID=53088566
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310512207.2A Active CN104572432B (zh) | 2013-10-24 | 2013-10-24 | 一种无锁链表管理装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104572432B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108052411A (zh) * | 2017-12-27 | 2018-05-18 | 杭州迪普科技股份有限公司 | 一种单向链表中断的修复方法和装置 |
CN112926162A (zh) * | 2021-04-01 | 2021-06-08 | 广东三维家信息科技有限公司 | 电控钻连线控制优化方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101582031A (zh) * | 2009-06-16 | 2009-11-18 | 中兴通讯股份有限公司 | 一种基于结构化语言的链表管理系统及方法 |
US20100082919A1 (en) * | 2008-09-26 | 2010-04-01 | Micron Technology, Inc. | Data streaming for solid-state bulk storage devices |
CN102314218A (zh) * | 2010-07-01 | 2012-01-11 | 李峰 | 一种智能化的手机上的人机交互方法和系统 |
-
2013
- 2013-10-24 CN CN201310512207.2A patent/CN104572432B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100082919A1 (en) * | 2008-09-26 | 2010-04-01 | Micron Technology, Inc. | Data streaming for solid-state bulk storage devices |
CN101582031A (zh) * | 2009-06-16 | 2009-11-18 | 中兴通讯股份有限公司 | 一种基于结构化语言的链表管理系统及方法 |
CN102314218A (zh) * | 2010-07-01 | 2012-01-11 | 李峰 | 一种智能化的手机上的人机交互方法和系统 |
Non-Patent Citations (1)
Title |
---|
陈春光等: "并发非阻塞自组织链表算法", 《计算机工程》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108052411A (zh) * | 2017-12-27 | 2018-05-18 | 杭州迪普科技股份有限公司 | 一种单向链表中断的修复方法和装置 |
CN108052411B (zh) * | 2017-12-27 | 2020-12-29 | 杭州迪普科技股份有限公司 | 一种单向链表中断的修复方法和装置 |
CN112926162A (zh) * | 2021-04-01 | 2021-06-08 | 广东三维家信息科技有限公司 | 电控钻连线控制优化方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104572432B (zh) | 2018-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8381230B2 (en) | Message passing with queues and channels | |
CN104216767A (zh) | 多线程之间访问共享数据的方法及装置 | |
CN103150149B (zh) | 处理数据库重做数据的方法和装置 | |
CN103440246A (zh) | 用于MapReduce的中间结果数据排序方法及系统 | |
CN103475584B (zh) | 三态内容寻址存储器(tcam)查询方法和装置 | |
CN106599091B (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
CN108255602A (zh) | 任务组合方法及终端设备 | |
CN111159235A (zh) | 数据预分区方法、装置、电子设备及可读存储介质 | |
CN105515997A (zh) | 基于bf_tcam实现零范围扩张的高效范围匹配方法 | |
CN106802927A (zh) | 一种数据存储方法及查询方法 | |
CN106407226B (zh) | 一种数据处理方法、备份服务器及存储系统 | |
CN109376165A (zh) | 内存数据库锁的实现方法和装置及计算机可读存储介质 | |
US8543722B2 (en) | Message passing with queues and channels | |
CN103995827A (zh) | MapReduce计算框架中的高性能排序方法 | |
CN102209016B (zh) | 一种数据处理方法、装置和数据处理系统 | |
AU2019241002B2 (en) | Transaction processing method and system, and server | |
CN104572432A (zh) | 一种无锁链表管理装置 | |
CN104573112A (zh) | Oltp集群数据库中页面查询方法及数据处理节点 | |
CN103064749B (zh) | 一种进程间通信方法 | |
CN102904812B (zh) | 路由表项的存储方法、查找方法、装置及系统 | |
CN107169115A (zh) | 添加自定义分词的方法及装置 | |
CN103701450A (zh) | 一种支持多值逻辑的三稳态rs触发器 | |
US11582133B2 (en) | Apparatus and method for distributed processing of identical packet in high-speed network security equipment | |
CN102867060A (zh) | 一种数据快速搜索方法、装置及系统 | |
CN105912273A (zh) | 一种报文共享储存管理的fpga实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: Binjiang District and Hangzhou city in Zhejiang Province Road 310051 No. 68 in the 6 storey building Applicant after: Hangzhou Dipu Polytron Technologies Inc Address before: Binjiang District and Hangzhou city in Zhejiang Province Road 310051 No. 68 in the 6 storey building Applicant before: Hangzhou Dipu Technology Co., Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |