CN104077078A - 读存储区、更新存储区的方法及装置 - Google Patents
读存储区、更新存储区的方法及装置 Download PDFInfo
- Publication number
- CN104077078A CN104077078A CN201310100886.2A CN201310100886A CN104077078A CN 104077078 A CN104077078 A CN 104077078A CN 201310100886 A CN201310100886 A CN 201310100886A CN 104077078 A CN104077078 A CN 104077078A
- Authority
- CN
- China
- Prior art keywords
- storage unit
- chain table
- ltsh chain
- version
- memory block
- 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
- Storage Device Security (AREA)
- Read Only Memory (AREA)
Abstract
本发明实施例提供一种读存储区、更新存储区的方法及装置。其中读存储区的方法包括:读取存储区的第一版本标识,从存储区读取数据信息,读取存储区的第二版本标识;如果第一版本标识与第二版本标识不一致,确定在读取第一版本标识到读取第二版本标识的过程中,确定存储区发生读写冲突,重复执行上述步骤,直至先读取的第一版本标识与后读取的第二版本标识保持一致时,确定存储区没有发生读写冲突。更新存储区的方法,包括:更新存储区的第二版本标识;更新存储区中存储的数据信息;更新存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致。写并发执行不会使系统发生颠簸,读写操作可以在同一个存储区并发执行。
Description
技术领域
本发明实施例涉及计算机技术,尤其涉及一种读存储区、更新存储区的方法及装置。
背景技术
在多核时代,由于处理器的主频提升遇到了瓶颈,计算机主要通过并行运算来提高运行速度。在并行计算过程中,往往需要对共享的存储区进行读写操作,当两个以上内核同时在同一段存储区上执行多条读取和写入指令的时候,由于系统总线上的多个读写操作指令可能会以任意的组合顺序执行,将会导致程序的执行结果与两段读写指令分开执行时不一致。
现有技术一提供的方案,如Hibernate方案,使用乐观锁和操作系统提供的信号量来控制读写冲突,或者使用乐观锁和硬件lock指令来控制读写冲突。在数据库为数据增加一个“version”字段填充数据的版本号。在读取出数据时,将此版本号一同读出。之后更新数据时,对此版本号加一。在提交数据时,将版本号与数据库记录的当前版本号进行比较,如果提交的版本号大于数据库记录的当前版本号,则予以更新,否则认为是过期数据。乐观锁的具体使用流程为:①使用操作系统提供的信号量或硬件lock指令对即将读取的存储区进行加锁操作;②T1时刻从存储区读取数据和版本号version;③将信号量解锁或使用unlock指令进行硬件解锁;④修改步骤2中读取的数据;⑤使用操作系统提供的信号量或硬件lock指令对上述存储区进行加锁操作;⑥T2时刻读取存储区中的版本号;⑦判断步骤6中读取的当前的版本号与步骤2中读取的版本号是否一致,如果一致则确定在T1时刻到T2时刻之间,上述存储区中数据没有被修改过,否则修改过;⑧根据步骤7的比较结果选择更新分支操作或者设置失败标志位;⑨将信号量解锁或使用unlock指令进行硬件解锁。然而,读操作和写操作在访问存储区之前,都要通过信号量或硬件lock指令获取对存储区的独占使用权来避免读写冲突时发生的读脏问题,导致访问同一存储区的读写操作不能并发执行。
现有技术二提供的方案采用读写记录列表的方法来进行读写冲突检测。读操作的过程如下:①将计划读取的存储区地址写入Read列表;②查询Write列表中是否存在相同的存储区地址;③根据步骤②的判断结果,决定执行读取操作或者设置conflict标志;④从Read列表中清除相应存储区地址,并根据conflict标志决定结束处理或者从步骤1开始重新执行。①写操作的处理过程如下:将计划写入的存储区地址写入Write列表;②查询Read列表中是否存在相同的存储区地址;③根据步骤②的查询结果,决定执行写入操作或者设置conflict标志;④从Write列表中清除相应存储区地址,并根据conflict标志决定结束处理或者从步骤①开始重新执行。然而,查询/修改Read表和Write表时,仍然需要使用读写锁或使用硬件lock指令获取对Read表和Write表的独占使用权,导致访问同一存储区的读写操作不能并发执行。
发明内容
本发明实施例提供一种读存储区、更新存储区的方法及装置,用以解决访问同一存储区的读写操作不能并发执行的缺陷。
第一方面,本发明实施例提供一种读存储区的方法,包括:
读取存储区的第一版本标识,从所述存储区读取数据信息,读取所述存储区的第二版本标识;初始时所述第一版本标识与所述第二版本标识保持一致,更新所述存储区时,所述第一版本标识的更新发生在更新所述存储区的数据信息之后,所述第二版本标识的更新发生在更新所述存储区的数据信息之前;
如果所述第一版本标识与所述第二版本标识不一致,确定在读取所述第一版本标识到读取所述第二版本标识的过程中,所述存储区发生读写冲突,重复执行上述步骤,直至所述第一版本标识与所述第二版本标识保持一致时,确定所述存储区没有发生读写冲突。
第二方面,本发明实施实施例提供一种读存储区的装置,包括:
读取模块,用于读取存储区的第一版本标识,从所述存储区读取数据信息,读取所述存储区的第二版本标识;初始时所述第一版本标识与所述第二版本标识保持一致,更新所述存储区时,所述第一版本标识的更新发生在更新所述存储区的数据信息之后,所述第二版本标识的更新发生在更新所述存储区的数据信息之前;
确定模块,用于如果所述读取模块读取的第一版本标识与第二版本标识不一致,确定在读取所述第一版本标识到读取所述第二版本标识的过程中,所述存储区发生读写冲突,重复执行上述步骤,直至所述第一版本标识与所述第二版本标识保持一致时,确定所述存储区没有发生读写冲突。
第三方面,本发明实施例提供一种更新存储区的方法,包括:
更新存储区的第二版本标识,更新所述存储区中存储的数据信息,更新所述存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,初始时所述第一版本标识与所述第二版本标识保持一致;读所述存储区时,所述第二版本标识的读取发生在读取所述存储区存储的数据信息之后,所述第一版本标识的读取发生在读取所述存储区存储的数据信息之前。
结合第三方面,在第一种可能的实现方式中,在更新存储区的第二版本标识之前,还包括:获取存储区的写者互斥控制权;
在更新所述存储区的第一版本标识之后,还包括:释放存储区的写者互斥控制权。
第四方面,本发明实施例提供一种更新存储区的装置,用于更新存储区的第二版本标识,更新所述存储区中存储的数据信息,更新所述存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;初始时所述第一版本标识与所述第二版本标识保持一致;读所述存储区时,所述第二版本标识的读取发生在读取所述存储区存储的数据信息之后,所述第一版本标识的读取发生在读取所述存储区存储的数据信息之前。
结合第四方面,在第一种可能的实现方式中,所述装置包括:
更新模块,用于更新存储区的第二版本标识,更新所述存储区中存储的数据信息,更新所述存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;初始时所述第一版本标识与所述第二版本标识保持一致;读所述存储区时,所述第二版本标识的读取发生在读取所述存储区存储的数据信息之后,所述第一版本标识的读取发生在读取所述存储区存储的数据信息之前;
所述更新模块,还用于在更新存储区的第二版本标识之前,获取存储区的写者互斥控制权;
释放模块,用于在所述更新模块更新所述存储区的第一版本标识之后,释放存储区的写者互斥控制权。
本发明实施例提供的技术方案中,存储区对应有两个版本标识,初始时两个版本标识相同。因为读存储区时读取存储区的两个版本标识的顺序,与更新存储区时更新存储区的两个版本标识的顺序恰好相反,读存储区时如果发生存储区发更新,读取的两个版本标识不一致,因此,读存储区时,通过先后读取的两个版本标识是否一致,来确定从存储区读取数据信息是否是存储区最新的数据信息。读取的两个版本标识不一致时,重新读存储区,直至先读取的第一版本标识与后读取的第二版本标识保持一致,同一读写冲突不会反复发生。由于,通过本发明提供的方法,读存储区时可以检测到存储区是否发生读写冲突,并且,读存储区的版本标识和更新存储区的版本标识时,不需要获取版本标识的独占访问权,读操作和更新操作可以同时访问一个存储区的版本标识,因而,读写并发执行不会使系统发生颠簸,读写操作可以在同一个存储区并发执行。
附图说明
图1为本发明实施例提供的一种读存储区的方法流程图;
图2为本发明实施例提供的一种更新存储区的方法流程图;
图3为本发明实施例提供的一种在哈希链表中查找目标存储单元的方法流程图;
图4为本发明实施例提供的一种在哈希链表中插入存储单元的方法流程图;
图5为本发明实施例提供的一种在哈希链表中删除存储单元的方法流程图;
图6为本发明实施例提供的另一种在哈希链表中查找目标存储单元的方法流程图;
图7为本发明实施例提供的另一种在哈希链表插入存储单元的方法流程图;
图8为本发明实施例提供的另一种在哈希链表删除存储单元的方法流程图;
图9为本发明实施例提供的一种读存储区的装置结构示意图;
图10为本发明实施例提供的一种更新存储区的装置结构示意图。
具体实施方式
图1为本发明实施例提供的一种读存储区的方法流程图。如图1所示,本实施例提供的方法包括:
步骤11:读取存储区的第一版本标识,从所述存储区读取数据信息,读取所述存储区的第二版本标识。初始时所述第一版本标识与所述第二版本标识保持一致,更新所述存储区时,所述第一版本标识的更新发生在更新所述存储区的数据信息之后,所述第二版本标识的更新发生在更新所述存储区的数据信息之前。
存储区的控制信息包括:第一版本标识和第二版本标识。版本标识可用整型变量int类型或无符号整型变量unsigned int类型实现。存储区的第一版本标识和存储区的第二版本标识,可以存储在该存储区内,也可以存储在存储区外部。初始阶段在存储区写入数据信息时,存储区的第一版本标识和存储区的第二版本标识保持一致。
读存储区时,以拷贝方式从存储区读取数据信息。以下三个操作:读取存储区的第一版本标识,从所述存储区读取数据信息,读取所述存储区的第二版本标识,可以通过一条指令来实现。
步骤12:如果第一版本标识与第二版本标识不一致,确定在读取第一版本标识到读取第二版本标识的过程中,所述存储区发生读写冲突,重复执行上述步骤,直至第一版本标识与第二版本标识保持一致。第一版本标识与第二版本标识保持一致时,确定所述存储区没有发生读写冲突。
读存储区的过程中,如果存储区发生更新,则称该存储区发生了读写冲突。在存储区发生读写冲突时,从存储区读取的数据信息不是存储区存储的最新的数据信息,而是存储区存储的旧数据信息,因此,存储区发生读写冲突时,从存储区读取的数据信息是脏数据。
在更新存储区之前,先更新存储区的第二版本标识,再写存储区的数据信息,最后更新存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致。更新存储区时,与读存储区不同的是,反序更新存储区的第二版本标识和第一版本标识。如果存储区发生读写冲突,后读取的存储区的第二版本标识,会与先读取的存储区的第一版本标识不一致;如果存储区没有发生读写冲突,后读取的存储区的第二版本标识,与先读取的存储区的第一版本标识保持一致,从存储区读取的数据信息是该存储区存储的最新的数据信息。因此,从存储区读取数据信息后,通过判断先读取的第一版本标识与后读取的第二版本标识是否一致,可以检测出存储区是否发生读写冲突。
如果确定后读取的存储区的第二版本标识与先读取的存储区的第一版本标识不一致,重新执行步骤11,即重新读取存储区的第一版本标识,再从存储区读取数据信息,然后再读取存储区的第二版本标识,直至先读取的第一版本标识与后读取的第二版本标识保持一致。
本实施例提供的读存储区的方法中,存储区对应有两个版本标识,初始时两个版本标识相同。因为读存储区时读取存储区的两个版本标识的顺序,与更新存储区时更新存储区的两个版本标识的顺序恰好相反,读存储区时如果发生存储区发更新,读取的两个版本标识不一致,因此,读存储区时,通过先后读取的两个版本标识是否一致,来确定从存储区读取数据信息是否是存储区最新的数据信息。读取的两个版本标识不一致时,重新读存储区,直至先读取的第一版本标识与后读取的第二版本标识保持一致,同一读写冲突不会反复发生。由于,通过本发明提供的方法,读存储区时可以检测到存储区是否发生读写冲突,并且,读存储区的版本标识和更新存储区的版本标识时,不需要获取版本标识的独占访问权,读操作和更新操作可以同时访问一个存储区的版本标识,因而,读写并发执行不会使系统发生颠簸,读写操作可以在同一个存储区并发执行。
图2为本发明实施例提供的一种更新存储区的方法流程图。如图2所示,本实施例提供的方法包括:
步骤21:更新存储区的第二版本标识。
步骤22:更新所述存储区中存储的数据信息。
步骤23:更新所述存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致。初始时所述第一版本标识与所述第二版本标识保持一致;读所述存储区时,所述第二版本标识的读取发生在读取所述存储区存储的数据信息之后,所述第一版本标识的读取发生在读取所述存储区存储的数据信息之前。
更新存储区时,更新存储区的两个版本标识的顺序,与读存储区时读取的两个版本标识的顺序正好相反。读存储区时,如果读取的第二版本标识与先读取的第一版本标识不一致,表明读存储区过程中,存储区发生了更新。
在更新第一版本标识时,使更新后的第一版本标识与更新后的第二版本标识保持一致,从而后续读存储区时,通过两个版本标识判断存储区是否发生读脏现象。
进一步,为了避免在更新存储区时,发生写脏现象,即避免多个写者对同一个存储区同时进行更新,存储区的控制信息还包括有写者互斥控制权。写者更新存储区的第二版本标识之前,先要获取到该存储区的写者互斥控制权,才能更新存储区的第二版本标识。写者更新存储区的第一版本标识之后,释放该存储区的写者互斥控制权。一个写者获取存储区的写者互斥控制权后。其它写者不能访问该存储区,而读者可以访问该存储区。也就是,一个存储区在同一时刻,只允许多个读者和一个写者访问。写者互斥控制权可以使用信号量sem_t或硬件lock指令实现。在只有一个写者和多个读者的场景下,写者访问存储区时,可以不为存储区设置写者互斥控制权。
本实施例提供的更新存储区的方法中,存储区对应有两个版本标识,初始时两个版本标识相同。因为读存储区时读取存储区的两个版本标识的顺序,与更新存储区时更新存储区的两个版本标识的顺序恰好相反,读存储区时如果发生存储区发更新,读取的两个版本标识不一致,因此,读存储区时,通过先后读取的两个版本标识是否一致,来确定从存储区读取数据信息是否是存储区最新的数据信息。读取的两个版本标识不一致时,重新读存储区,直至先读取的第一版本标识与后读取的第二版本标识保持一致,同一读写冲突不会反复发生。由于,通过本发明提供的方法,读存储区时可以检测到存储区是否发生读写冲突,并且,读存储区的版本标识和更新存储区的版本标识时,不需要获取版本标识的独占访问权,读操作和更新操作可以同时访问一个存储区的版本标识,因而,读写并发执行不会使系统发生颠簸,读写操作可以在同一个存储区并发执行。
本发明实施例提供的以上方法适应于所有具有读写冲突的场景,例如,一些读取次数远远多于写入次数的控制系统、显卡的缓冲区系统等场景,能够使读取并行能力达到最大,并且读写冲突能够被读者实时地检测出来。下面结合存储区的具体场景,基于图1和图2提供的基本方法,说明读者和写者如何访问存储区。
存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和在哈希链表中所述存储单元的下一个存储单元的地址索引值。存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表。每个哈希链表的链头中存储的地址索引值为该链表中第一个存储单元的地址索引值。哈希链表中存储单元为非空闲存储单元。所有空闲存储单元组成了空闲链表。
为了使读者和写者可以并发访问同一个存储单元,并且读者能检测出读写是否冲突,需要为存储区设置控制信息。设置控制信息的第一种方法是为每个存储单元设置控制信息,一个存储单元的控制信息包括存储单元的第一版本标识和所述存储单元的第二版本标识以及写者互斥控制权;
第二种方法是为哈希表每个链表设置控制信息,一个链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识。
以下方法实施例中,描述基于存储区的第一种控制信息,读者和写者如何访问存储单元,读者访问存储单元的目的是如何在哈希表的一个链表中查找目标存储单元,写者访问存储单元的一个目的是,如何将一个空闲存储单元加入表哈希表的一个链表中,另一个目的是,如何在哈希表的一个链表中删除一个存储单元。
读者查找目标存储单元的方法如下;根据目标地址的哈希值,在哈希链表中确定目标哈希链表的链头。其中,目标地址为待查找存储单元的地址,目标哈希链表为所述哈希表中所述待查找存储单元所在的链表。确定目标哈希链表后,从目标哈希链表的链头开始依次访问所述目标哈希链表中的存储单元,直至访问到的存储单元的地址与所述目标地址一致,或者,直至访问过目标哈希链表中的所有存储单元。
其中,读者访问当前存储单元的过程如下:先从当前存储单元中读取第一版本标识,再从当前存储单元读取数据信息,然后再从当前存储单元中读取第二版本标识。如果从当前存储单元中读取的第一版本标识与第二版本标识不一致,则确定发生读写冲突,重新从目标哈希链表的链头开始访问目标哈希链表中的存储单元。如果从当前存储单元中读取的第一版本标识与第二版本标识一致,根据当前存储单元存储的数据信息,判断当前存储单元的地址与所述目标地址是否一致,如果一致,则结束访问目标哈希链表;如果不一致,则访问当前存储单元的下一个存储单元。存储单元的数据信息中包括为存储单元分配的地址,通过比较存储单元的地址与目标地址,可以确定当前存储单元是否是目标存储单元。
图3为本发明实施例提供的一种在哈希链表中查找目标存储单元的方法流程图。图3提供的方法为上述读者找目标存储单元方法的一种具体实现方法。如图3所示,本实施例提供的方法包括:
步骤31:根据目标地址的哈希值,在哈希表中确定目标哈希链表的链头。其中,目标地址为待查找存储单元的地址,目标哈希链表为所述待查找存储单元所在的哈希链表。
步骤32:以原子方式从目标哈希链表的链头中读取该链表中第一个存储单元的地址索引值。
为避免访问目标哈希链表的链头时从链头中读出脏数据,可以将每个哈希链表的链头中存储的信息声明为原子类型。在访问目标哈希链表的链头时,从原子方式从链头中读取信息。原子操作一旦开始,就一直运行到结束,中间不会有任何上下文切换。因此,原子方式从链头中读取信息不会发生读写冲突。另外,也可以为每个哈希链表的链头设置控制信息,哈希链表的链头的控制信息包括链头的第一版本标识和第二版本标识。链头中读取信息时,先读取第一版本信息,再读取信息,之后再读取第二版本。判断第二版本标识与第一版本标识是否一致,如果一致,则确定没有发生读写冲突,从链头读取的信息为最新信息。
进一步,在步骤32之后还可以判断从链头中读取的地址索引值是否为有效值,如果是有效值,表示该链表不为空,否则确定该链表为空,返回没有查找到目标存储单元的信息。
步骤33:以拷贝方式根据地址索引值从相应的存储单元中依次读取该存储单元的第一版本标识V1、数据信息和第二版本标识V2。
步骤34:判断读取的第一版本标识V1和第二版本标识V2是否一致。如果一致,执行步骤35;如果不一致,返回步骤32执行。
进一步,每个存储单元的数据信息还可包括配置信息,配置信息表示存储单元是否被分配。因此,如果读取的第一版本标识V1和第二版本标识一致,还可以根据配置信息判断当前存储单元是否被分配,如果没有被分配则返回步骤32执行,否则执行步骤35。
步骤35:判断从存储区读取的数据信息中的地址与目标地址是否一致,如果一致,结束并返回该存储单元的地址;否则,执行步骤36。
步骤36:判断当前存储单元中存储的地址索引值是否为有效值,如果是,则执行步骤33,否则执行步骤37。
步骤37:结束访问并返回没有查找到目标存储单元的信息。
实现图3提供的方法一种伪代码如下:
写者将空闲链表中的一个空闲存储单元插入到哈希链表的过程如下:
步骤a:获取空闲链表的写者互斥控制权,在空闲链表中删除指定的空闲存储单元,释放所述空闲链表的写者互斥控制权。其中,所有空闲存储单元组织成一个空闲链表。空闲链表的控制信息包括写者互斥控制权。一个写者获取空闲链表的写者互斥控制权后,其它写者不能空闲链表,直至写者释放该空闲链表的写者互斥控制权。
步骤b:根据所述空闲存储单元的地址的哈希值,确定目标哈希链表的链头,所述目标哈希链表为所述空闲存储单元待插入的哈希链表。
步骤c:如果所述空闲存储单元插入所述目标哈希链表后。所述空闲存储单元为所述目标哈希链表中的第一个存储单元,获取所述目标哈希链表的链头的写者互斥控制权,否则获取所述空闲存储单元插入到所述目标哈希链表后在所述目标哈希链表中的前一个存储单元的写者互斥控制权。
步骤d:获取所述空闲存储单元的写者互斥控制权,更新所述空闲存储空闲单元中存储的第二版本标识,将所述空闲存储单元插入到所述目标哈希链表,更新所述空闲存储空闲单元中存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述空闲存储单元的写者互斥控制权,释放所述目标哈希链表中所述空闲存储单元的前一个存储单元的写者互斥控制权或释放所述目标哈希链表的链头的写者互斥控制权。
写者可以将从空闲链表中取出的空闲存储单元插入到哈希链表的链头,也可以插入到哈希链表的其它位置。如果所述空闲存储单元插入所述目标哈希链表后。所述空闲存储单元为所述目标哈希链表中的第一个存储单元,需要将目标哈希链表的链头中存储的地址索引值更新为空闲存储单元的地址索引值,将空闲存储单元中存储的地址索引值更新为原第一个存储单元的地址索引值。依据写者更新存储区的方法,先获取所述目标哈希链表的链头的写者互斥控制权和所述空闲存储单元的写者互斥控制权,更新所述空闲存储空闲单元中存储的第二版本标识,将所述空闲存储单元中存储的地址索引值更新为原第一个存储单元的地址索引值,将目标哈希链表的链头中存储的地址索引值更新为空闲存储单元的地址索引值,从而将所述空闲存储单元插入到所述目标哈希链表,更新所述空闲存储空闲单元中存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述空闲存储单元的写者互斥控制权,释放所述目标哈希链表中所述空闲存储单元的前一个存储单元的写者互斥控制权。
图4为本发明实施例提供的一种在哈希链表中插入存储单元的方法流程图。图4提供的方法中写者将空闲存储单元链表中的一个空闲存储单元加入到哈希链表后,该空闲存储单元成为哈希链表中的第一个存储单元。如图4所示,本实施例提供的方法包括:
步骤41:获取空闲链表的写者互斥控制权。
步骤42:如果空闲链表不为空,从空闲链表中取出第一个空闲存储单元。
步骤43:释放所述空闲链表的写者互斥控制权。在步骤43之后,执行步骤45。
步骤44:如果空闲链表为空,则分配失败并返回空地址。
步骤45:从步骤42中取出的空闲存储单元中读取地址,并计算地址的哈希值,获取该地址的哈希值对应的目标哈希链表的链头的互斥访问权限。
步骤46:以原子方式读取目标哈希链表的链头中的地址索引值。
步骤47:获取所述空闲存储单元的写者互斥访问权限。所述空闲存储单元为步骤42中取出的空闲存储单元。
步骤48:按顺序更新所述空闲存储单元的第二版本标识、所述空闲存储单元中存储的数据信息和所述空闲存储单元的第一版本标识。
更新所述空闲存储单元中存储的数据信息时,将目标哈希链表的链头中存储的地址索引值作为所述空闲存储单元的下一个存储单元的地址索引值写入到所述空闲存储单元。
步骤49:释放所述存储单元的写者互斥访问权限,并将目标哈希链表的链头中存储的地址索引值替换为该存储单元的地址索引值。
步骤410:释放目标哈希链表的链头的互斥访问权限。
一种实现图4提供的方法的伪代码如下:
写者在哈希链表中删除一个存储单元的方法如下:
a:根据目标地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头,所述目标地址为待释放存储单元的地址,所述目标哈希链表为所述待释放存储单元所在的哈希链表。
b:访问所述目标哈希链表的链头时,获取所述目标哈希链表的链头的写者互斥控制权,从所述目标哈希链表的链头中存储的地址索引值对应的所述目标哈希链表中第一个存储单元中,读取为所述第一个存储单元分配的地址;如果所述目标哈希链表的第一个存储单元的地址与所述目标地址一致,更新所述目标哈希链表的链头的第二版本标识,将所述目标哈希链表的链头存储的地址索引值更新为所述目标哈希链表的第一个存储单元中存储的地址索引值,更新所述目标哈希链表的链头的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致。
从所述目标哈希链表的链头中存储的地址索引值对应的所述目标哈希链表中第一个存储单元中,读取为所述第一个存储单元分配的地址的具体过程如下:获取所述目标哈希链表的链头的写者互斥控制权,读取所述目标哈希链表的链头中存储的地址索引值,根据所述目标哈希链表的链头中存储的地址索引值查找所述目标哈希链表中的第一个存储单元,从所述第一个存储单元读取为所述第一个存储单元分配的地址。写者在访问目标哈希链表的链头时,已获取该链头的写者互斥控制权,因此,同一时刻只有一个写者和多个读者访问目标哈希链表,在写者从目标哈希链表中的存储单元中读取数据信息时,不会有其它写者对这些存储单元进行更新,因而也不需要进行读写冲突检测。在写者需要更新存储单元中数据信息时,为避免读者读到脏数据,顺序需要更新存储单元的第二版本标识、数据信息和第一版本标识。
如果目标哈希链表的第一个存储单元的地址与所述目标地址一致,则确定所述第一个存储单元为待释放的存储单元。在目标哈希链表中删除待释放的存储单元时,需要将所述目标哈希链表的链头存储的地址索引值更新为所述目标哈希链表的第一个存储单元中存储的地址索引值。因此,在删除待释放的存储单元之前,先更新所述目标哈希链表的链头的第二版本标识,再删除待释放的存储单元,之后再更新所述目标哈希链表的链头的第一版本标识。
c:如果所述目标哈希链表的第一个存储单元的地址与所述目标地址不一致,访问所述目标哈希链表中的下一个存储单元,直至访问的当前存储单元的地址与所述目标地址一致。
d:访问除所述第一个存储单元之外的当前存储单元时,从所述当前存储单元读取为所述当前存储单元分配的地址,在访问的当前存储单元的地址与所述目标地址一致时,更新所述当前存储单元的前一个存储单元存储的第二版本标识,将所述当前存储单元的前一个存储单元存储的地址索引值修改为所述当前存储单元存储的地址索引值,更新所述当前存储单元的前一个存储单元存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致。
如果待释放的存储单元不是目标哈希链表中第一个存储单元,继续访问目标链表,直至查找到待释放的存储单元。如果当前访问到的存储单元即当前存储单元为待释放的存储单元,在删除当前存留单元时,需要将当前存储单元的前一个存储单元中存储的地址索引值更新为当前存储单元中存储的地址索引值,也就是更新为当前存储单元的下一个存储单元的地址索引值。因此,删除当前存储单元时,要更新当前存储单元的上一个存储单元中存储的数据信息,由于在写者释放目标哈希链表的链头的写者互斥控制权之前,只有一个写者和多个读者访问目标哈希链表,在更新当前存储单元的上一个存储单元中存储的数据信息之前,可以不获取当前存储单元的上一个存储单元的写者互斥控制权。
e:释放所述目标哈希链表的链头的写者互斥控制权;
f:获取查找到的存储单元的写者互斥控制权和空闲链表的写者互斥控制权,更新所述查找到的存储单元的第二版本标识,将所述查找到的存储单元插入到所述空闲链表,更新所述查找到的存储单元的第一版本标识,释放所述查找到的存储单元的写者互斥控制权和所述空闲链表的互斥控制权。其中,查找到的存储单元为目标哈希链表中地址与所述目标地址一致的存储单元。
在目标哈希链表中将查找到的存储单元释放后,还需要将释放的存储单元插入到空闲链表中,在将释放的存储单元插入到空闲链表时,需要更新空闲链表和查找到的存储单元中的地址索引值,因此,要先获取查找到的存储单元的写者互斥控制权和空闲链表的写者互斥控制权。之后,更新所述查找到的存储单元的第二版本标识,将所述查找到的存储单元插入到所述空闲链表,更新所述查找到的存储单元的第一版本标识,释放所述查找到的存储单元的写者互斥控制权和所述空闲链表的互斥控制权。
图5为本发明实施例提供的一种在哈希链表中删除存储单元的方法流程图。图5为上述写者在哈希链表中删除存储单元的方法一种实现方式。如图5所示,本实施例提供的方法,包括:
步骤51:根据目标地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头,获取目标哈希链表的链头的写者互斥控制权,以原子方式从该链头中读取目标哈希链表中第一个存储单元的地址索引值。其中,所述目标地址为待释放存储单元的地址,所述目标哈希链表为所述待释放存储单元所在的哈希链表。
步骤52:判断从链头中读取的地址索引值是否为有效值。如果是,执行步骤53,否则,释放目标哈希链表的链头的写者互斥控制权,结束。
步骤53:从当前访问的存储单元中读取当前存储单元的地址,判断读取的地址与目标地址是否一致,如果不一致,执行步骤54,如果一致,执行步骤55。
步骤54:从当前存储单元中读取下一个存储单元的地址索引值,返回步骤52。
步骤55:判断当前存储单元是否为目标哈希链表中的第一个存储单元,如果不是,执行步骤56;如果是,执行步骤57。
步骤56:获取当前存储单元的前一个存储单元的写者互斥控制权,更新所述前一个存储单元的第二版本标识,将所述前一个存储单元中存储的地址索引值更新为当前存储单元存储的地址索引值,更新所述前一个存储单元的第一版本标识。之后,执行步骤58。
由于只有一个写者和多个读者访问目标哈希链表,因此,在更新所述前一个存储单元中存储的地址索引之前,也可以不需要获取所述前一个存储单元的写者互斥控制权。
步骤57:将链头中存储的地址索引值更新为第一个存储单元中存储的地址索引值。之后,执行步骤58。
步骤58:获取当前存储单元的写者互斥控制权,更新当前存储单元的第二版本标识,将当前存留单元中存储的地址索引值设置为无效值,将其配置信息设置为未分配,之后更新更新当前存储单元的第一版本标识,释放当前存储单元的写者互斥控制权。之后,执行步骤59。
步骤59:释放目标哈希链表的链头的写者互斥控制权。之后,执行步骤510。
步骤510:获取当前存储单元的写者互斥控制权和空闲链表的写者互斥控制权,更新当前的存储单元的第二版本标识,将当前存储单元插入到所述空闲链表,更新当前存储单元的第一版本标识,释放当前存储单元的写者互斥控制权和所述空闲链表的互斥控制权。
一种实现图5提供的方法的伪代码如下:
为每个哈希链表设置控制信息,一个链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识。
以下方法实施例中,描述基于存储区以下的控制信息,读者和写者如何访问存储单元。存储区的控制信息为:每个哈希链表设置有控制信息,一个哈希链表的控制信息包括所述哈希链表的写者互斥控制权、第一版本标识和第二版本标识。
读者在哈希链表中查找目标存储单元的过程如下:
a:根据目标地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头,所述目标地址为待查找存储单元的地址,所述目标哈希链表为所述待查找存储单元所在的哈希链表;
b:读取所述目标哈希链表的第一版本标识;
c:从所述目标哈希链表的链头开始依次访问所述目标哈希链表中的存储单元,直至访问到的存储单元的地址与所述目标地址一致,或者,直至访问过所述目标哈希链表中的所有存储单元;
其中,在访问当前存储单元时,从当前存储单元读取数据信息,然后读取所述目标哈希链表的第二版本标识,判断先读取的第一版本标识与后读取的第二版本标识是否一致,如果不一致,重新从所述目标哈希链表的链头开始访问所述目标哈希链表中的存储单元;如果一致,访问所述目标哈希链表中的下一存储单元。
图6为本发明实施例提供的另一种在哈希链表中查找目标存储单元的方法流程图。图6提供的方法为上述读者在哈希链表中查找目标存储单元的方法的一种具体实现过程。如图6所示,本实施例提供的方法包括:
步骤61:根据目标地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头。
步骤62:读取所述目标哈希链表的第一版本标识。
步骤63:从目标哈希链表的链头中读取目标哈希链表的第一个存储单元的地址索引值。
步骤64:读取所述目标哈希链表的第二版本标识,判断读取的第一版本标识与第二版本标识是否一致,如果不一致,执行返回步骤62,重新从所述目标哈希链表的链头开始访问所述目标哈希链表中的存储单元;如果一致,
执行步骤65。
步骤65;从当前存储单元中读取当前存储单元的地址。
步骤66:读取所述目标哈希链表的第二版本标识;判断已读取的第一版本标识与当前读取的第二版本标识是否一致。如果一致,执行步骤67,否则返回步骤62执行。
步骤67:判断当前存储单元的地址是否与目标地址相同,如果相同,结束;否则,执行步骤68。
步骤68:读取当前存储单元中存储的地址索引值,访问下一个存储单元。返回步骤62执行。
一种实现图6提供的方法的伪代码如下:
写者将空闲链表中的一个空闲存储单元插入到哈希链表中的过程如下:
a:获取空闲链表的写者互斥控制权,在所述空闲链表中删除指定的空闲存储单元,释放所述空闲链表的写者互斥控制权。
b:根据所述空闲存储单元的地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;
c:获取所述目标哈希链表的写者互斥控制权,更新所述目标哈希链表的第二版本标识,将所述空闲存储单元插入到所述目标哈希链表,更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述目标哈希链表的写者互斥控制权。
图7为本发明实施例提供的另一种在哈希链表插入存储单元的方法流程图。如图7所示,本实施例提供的方法包括:
步骤71:获取空闲链表的写者互斥控制权。
步骤72:在空闲链表中删除指定的空闲存储单元。
步骤73:释放空闲链表的写者互斥控制权。
步骤74:根据所述空闲存储单元的地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头,获取目标哈希链表的写者互斥控制权。
步骤75:更新所述目标哈希链表的第二版本标识。
步骤76:将所述空闲存储单元插入到目标哈希链表的首部。
步骤77:更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致。
步骤78:释放所述目标哈希链表的写者互斥控制权。
一种实现图7提供的方法的伪代码如下:
写者在哈希链表删除存储单元的方法如下:
a:根据所述空闲存储单元的地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头,所述目标哈希链表为所述空闲存储单元待插入的哈希链表。
b:获取所述目标哈希链表的写者互斥控制权,在所述目标哈希链表中查找地址与所述目标地址一致的存储单元,更新所述目标哈希链表的第二版本标识,在所述目标哈希链表中删除查找到的存储单元,更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述目标哈希链表的写者互斥控制权。
c:获取空闲链表的写者互斥控制权,将查找到的存储单元插入到所述空闲链表,释放所述空闲链表的互斥控制权。其中,此处的查找到的存储单元为步骤b中已在目标哈希链表中删除的存储单元。
图8为本发明实施例提供的另一种在哈希链表删除存储单元的方法流程图。如图8所示,本实施例提供的方法包括:
步骤81:根据所述空闲存储单元的地址的哈希值,确定目标哈希链表。获取所述目标哈希链表的写者互斥控制权。
步骤82:更新所述目标哈希链表的第二版本标识。
步骤83:读取目标哈希链表的链头中存储的地址索引值。
步骤84:判断地址索引值对应的当前存储单元的地址是否与目标地址一致,如果不一致,执行步骤85,否则执行步骤86。
步骤85:读取下一个存储单元的地址索引值,返回步骤84执行。
步骤86:更新所述目标哈希链表的第二版本标识。
步骤87:判断当前存储单元是否是目标哈希链表中的第一个存储单元。如果是,执行步骤88;否则,执行步骤89。
步骤88:将目标哈希链表的链头中存储的地址索引值更新为当前存储单元中存储的地址索引值。之后,执行步骤810。
步骤89:将当前存储单元的前一个存储单元存储的地址索引值更新为当前存储单元中存储的地址索引值。之后,执行步骤810。
步骤810:更新所述目标哈希链表的第一版本标识,释放目标哈希链表的写者互斥控制权。
步骤811:获取空闲链表的写者互斥控制权,将当前存储单元插入到所述空闲链表,释放所述空闲链表的互斥控制权。
一种实现图8提供的方法的伪代码如下:
图9为本发明实施例提供的一种读存储区的装置结构示意图。如图9所示,本实施例提供的装置包括:读取模块91和确定模块92。
读取模块91,用于读取存储区的第一版本标识,从所述存储区读取数据信息,读取所述存储区的第二版本标识;初始时所述第一版本标识与所述第二版本标识保持一致,更新所述存储区时,所述第一版本标识的更新发生在更新所述存储区的数据信息之后,所述第二版本标识的更新发生在更新所述存储区的数据信息之前。
确定模块92,用于如果所述读取模块读取的第一版本标识与第二版本标识不一致,确定在读取所述第一版本标识到读取所述第二版本标识的过程中,所述存储区发生读写冲突,重复执行上述步骤,直至所述第一版本标识与所述第二版本标识保持一致时,确定所述存储区没有发生读写冲突。
本实施例提供的技术方案中,存储区对应有两个版本标识,初始时两个版本标识相同。因为读存储区时读取存储区的两个版本标识的顺序,与更新存储区时更新存储区的两个版本标识的顺序恰好相反,读存储区时如果发生存储区发更新,读取的两个版本标识不一致,因此,读存储区时,通过先后读取的两个版本标识是否一致,来确定从存储区读取数据信息是否是存储区最新的数据信息。读取的两个版本标识不一致时,重新读存储区,直至先读取的第一版本标识与后读取的第二版本标识保持一致,同一读写冲突不会反复发生。由于,通过本发明提供的方法,读存储区时可以检测到存储区是否发生读写冲突,并且,读存储区的版本标识和更新存储区的版本标识时,不需要获取版本标识的独占访问权,读操作和更新操作可以同时访问一个存储区的版本标识,因而,读写并发执行不会使系统发生颠簸,读写操作可以在同一个存储区并发执行。
存储区的结构如下:存储区包括多个存储单元,所述第一版本标识具体为所述存储单元的第一版本标识,所述第二版本标识具体为所述存储单元的第二版本标识。每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表。每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识。
基于存储区的上述控制信息,存储区读装置中的各模块的具有功能如下:
所述读取模块,还用于根据目标地址的哈希值,确定目标哈希链表的链头,所述目标地址为待查找存储单元的地址,所述目标哈希链表为所述待查找存储单元所在的哈希链表。
所述读取模块,还用于从所述目标哈希链表的链头开始依次访问所述目标哈希链表中的存储单元,直至访问到的存储单元的地址与所述目标地址一致,或者,直至访问过所述目标哈希链表中的所有存储单元。
所述读取模块,还用于在访问当前存储单元时,先从当前存储单元中读取第一版本标识,再从当前存储单元读取数据信息,然后再从当前存储单元中读取第二版本标识。
所述确定模块,还用于如果从当前存储单元中读取的第一版本标识与第二版本标识不一致,使所述读取模块重新从所述目标哈希链表的链头开始访问所述目标哈希链表中的存储单元。
所述确定模块,还用于如果从当前存储单元中读取的第一版本标识与第二版本标识一致,根据当前存储单元存储的数据信息,判断当前存储单元的地址与所述目标地址是否一致,如果一致,则结束访问所述目标哈希链表;如果不一致,则使所述读取模块访问当前存储单元的下一个存储单元。
下面存储区的控制信息与上述存储区的控制信息不同之处在于;存储单元没有设置控制信息,而是每个哈希链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识。即,上述第一版本标识具体为所述链表的第一版本标识,上述第二版本标识具体为所述链表的第二版本标识。
基于存储区的上述结构,存储区读装置中的各模块的具有功能如下:
所述读取模块,还用于根据目标地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头,所述目标地址为待查找存储单元的地址,所述目标哈希链表为所述待查找存储单元所在的哈希链表;
所述读取模块,还用于读取所述目标哈希链表的第一版本标识;
所述读取模块,还用于从所述目标哈希链表的链头开始依次访问所述目标哈希链表中的存储单元,直至访问到的存储单元的地址与所述目标地址一致,或者,直至访问过所述目标哈希链表中的所有存储单元;
所述读取模块,还用于在访问当前存储单元时,从当前存储单元读取数据信息,然后读取所述目标哈希链表的第二版本标识;
所述确定模块,用于判断先读取的第一版本标识与后读取的第二版本标识是否一致,如果不一致,使所述读取模块重新从所述目标哈希链表的链头开始访问所述目标哈希链表中的存储单元;如果一致,使所述读取模块访问所述目标哈希链表中的下一存储单元。
本发明实施例还提供一种更新存储区的装置,用于更新存储区的第二版本标识,更新所述存储区中存储的数据信息,更新所述存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;初始时所述第一版本标识与所述第二版本标识保持一致;读所述存储区时,所述第二版本标识的读取发生在读取所述存储区存储的数据信息之后,所述第一版本标识的读取发生在读取所述存储区存储的数据信息之前。
图10为本发明实施例提供的一种更新存储区的装置结构示意图。如图10所示,本实施例提供的装置包括:更新模块101和释放模块102。
更新模块101,用于更新存储区的第二版本标识,更新所述存储区中存储的数据信息,更新所述存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;初始时所述第一版本标识与所述第二版本标识保持一致;读所述存储区时,所述第二版本标识的读取发生在读取所述存储区存储的数据信息之后,所述第一版本标识的读取发生在读取所述存储区存储的数据信息之前;
所述更新模块101,还用于在更新存储区的第二版本标识之前,获取存储区的写者互斥控制权;
释放模块102,用于在所述更新模块更新所述存储区的第一版本标识之后,释放存储区的写者互斥控制权。
本实施例提供的技术方案中,存储区对应有两个版本标识,初始时两个版本标识相同。因为读存储区时读取存储区的两个版本标识的顺序,与更新存储区时更新存储区的两个版本标识的顺序恰好相反,读存储区时如果发生存储区发更新,读取的两个版本标识不一致,因此,读存储区时,通过先后读取的两个版本标识是否一致,来确定从存储区读取数据信息是否是存储区最新的数据信息。读取的两个版本标识不一致时,重新读存储区,直至先读取的第一版本标识与后读取的第二版本标识保持一致,同一读写冲突不会反复发生。由于,通过本发明提供的方法,读存储区时可以检测到存储区是否发生读写冲突,并且,读存储区的版本标识和更新存储区的版本标识时,不需要获取版本标识的独占访问权,读操作和更新操作可以同时访问一个存储区的版本标识,因而,读写并发执行不会使系统发生颠簸,读写操作可以在同一个存储区并发执行。
存储区的结构如下:存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表。每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识以及所述存储单元的写者互斥控制权。因此,上述第一版本标识具体为所述存储单元的第一版本标识,上述第二版本标识具体为所述存储单元的第二版本标识。
基于存储区的上述控制信息,在哈希链链表中插入从空闲链表中取出的存储单元时,更新存储区的装置中的各模块的具有功能如下:
所述更新模块,还用于获取空闲链表的写者互斥控制权,在所述空闲链表中删除指定的空闲存储单元;
所述释放模块,还用于在在所述空闲链表中删除指定的空闲存储单元后,释放所述空闲链表的写者互斥控制权;
所述更新模块,还用于根据所述空闲存储单元的地址的哈希值,确定目标哈希链表和所述目标哈希链表的链头,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;
所述更新模块,还用于如果将所述空闲存储单元插入到所述目标哈希链表的链头,获取所述目标哈希链表的链头的写者互斥控制权,否则获取所述空闲存储单元插入到所述目标哈希链表后,在所述目标哈希链表中所述空闲存储单元的前一个存储单元的写者互斥控制权;
所述更新模块,还用于获取所述空闲存储单元的写者互斥控制权,更新所述空闲存储空闲单元中存储的第二版本标识,将所述空闲存储单元插入到所述目标哈希链表,更新所述空闲存储空闲单元中存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,
所述释放模块,还用于更新所述空闲存储空闲单元中存储的第一版本标识后,释放所述空闲存储单元的写者互斥控制权,释放所述目标哈希链表中所述空闲存储单元的前一个存储单元的写者互斥控制权或释放所述目标哈希链表的链头的写者互斥控制权。
基于存储区的上述控制信息,释放哈希链表中一个存储单元并插入到空闲链表中时,更新存储区的装置中各模块的具体功能如下:
所述更新存储区的装置还包括读取模块;
所述更新模块,还用于根据目标地址的哈希值,确定目标哈希链表和所述目标哈希链表的链头,所述目标地址为待释放存储单元的地址,所述目标哈希链表为所述待释放存储单元所在的哈希链表;
所述读取模块,用于访问所述目标哈希链表的链头时,获取所述目标哈希链表的链头的写者互斥控制权,从所述目标哈希链表的链头中存储的地址索引值对应的所述目标哈希链表中第一个存储单元中,读取为所述第一个存储单元分配的地址;
所述更新模块,还用于如果所述目标哈希链表的第一个存储单元的地址与所述目标地址一致,更新所述目标哈希链表的链头的第二版本标识,将所述目标哈希链表的链头存储的地址索引值更新为所述目标哈希链表的第一个存储单元中存储的地址索引值,更新所述目标哈希链表的链头的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;
所述读取模块,还用于如果所述目标哈希链表的第一个存储单元的地址与所述目标地址不一致,访问所述目标哈希链表中的下一个存储单元,直至访问的当前存储单元的地址与所述目标地址一致;
所述读取模块,还用于访问除所述第一个存储单元之外的当前存储单元时,从所述当前存储单元读取为所述当前存储单元分配的地址;
所述更新模块,还用于在访问的当前存储单元的地址与所述目标地址一致时,更新所述当前存储单元的前一个存储单元存储的第二版本标识,将所述当前存储单元的前一个存储单元存储的地址索引值修改为所述当前存储单元存储的地址索引值,更新所述当前存储单元的前一个存储单元存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;释放所述目标哈希链表的链头的写者互斥控制权;
所述更新模块,还用于获取查找到的存储单元的写者互斥控制权和空闲链表的写者互斥控制权,更新所述查找到的存储单元的第二版本标识,将所述查找到的存储单元插入到所述空闲链表,更新所述查找到的存储单元的第一版本标识,释放所述查找到的存储单元的写者互斥控制权和所述空闲链表的互斥控制权。
以下存储区与上述存留区的不同之处于,存储区的每个存储单元没有设置控制信息,而是为每个哈希链表设置了控制信息,哈希链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识。因此,上述第一版本标识具体为所述链表的第一版本标识,上述第二版本标识具体为所述链表的第二版本标识。
在哈希链表中插入从空闲链表中取出的存储单元时,更新存储区的装置中各模块的具体功能如下:
所述更新模块,还用于获取空闲链表的写者互斥控制权,在所述空闲链表中删除指定的空闲存储单元;
所述释放模块,还用于在所述空闲链表中删除指定的空闲存储单元后,释放所述空闲链表的写者互斥控制权;
所述更新模块,用于根据所述空闲存储单元的地址的哈希值,确定目标哈希链表,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;
所述更新模块,还用于获取所述目标哈希链表的写者互斥控制权,更新所述目标哈希链表的第二版本标识,将所述空闲存储单元插入到所述目标哈希链表,更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述目标哈希链表的写者互斥控制权。
在哈希链表中释放存储单元,并将被释放的存储单元插入到空闲链表时,更新存储区的装置的各模块的具体功能如下:
所述更新存储区的装置还包括读取模块;
所述更新模块,还用于根据所述空闲存储单元的地址的哈希值,确定目标哈希链表,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;
所述获取模块,还用于获取所述目标哈希链表的写者互斥控制权;
所述读取模块,用于获取所述目标哈希链表的写者互斥控制权后,在所述目标哈希链表中查找地址与所述目标地址一致的存储单元;
所述更新模块,还用于查找到地址与所述目标地址一致的存储单元时,更新所述目标哈希链表的第二版本标识,在所述目标哈希链表中删除查找到的存储单元,更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述目标哈希链表的写者互斥控制权;
所述更新模块,还用于获取空闲链表的写者互斥控制权,将查找到的存储单元插入到所述空闲链表,释放所述空闲链表的互斥控制权。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (18)
1.一种读存储区的方法,其特征在于,包括:
读取存储区的第一版本标识,从所述存储区读取数据信息,读取所述存储区的第二版本标识;初始时所述第一版本标识与所述第二版本标识保持一致,更新所述存储区时,所述第一版本标识的更新发生在更新所述存储区的数据信息之后,所述第二版本标识的更新发生在更新所述存储区的数据信息之前;
如果所述第一版本标识与所述第二版本标识不一致,确定在读取所述第一版本标识到读取所述第二版本标识的过程中,所述存储区发生读写冲突,重复执行上述步骤,直至所述第一版本标识与所述第二版本标识保持一致时,确定所述存储区没有发生读写冲突。
2.根据权利要求1所述的方法,其特征在于,所述存储区包括多个存储单元,所述第一版本标识具体为所述存储单元的第一版本标识,所述第二版本标识具体为所述存储单元的第二版本标识;
每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识;所述方法还包括:
根据目标地址的哈希值,确定目标哈希链表的链头,所述目标地址为待查找存储单元的地址,所述目标哈希链表为所述待查找存储单元所在的哈希链表;
从所述目标哈希链表的链头开始依次访问所述目标哈希链表中的存储单元,直至访问到的存储单元的地址与所述目标地址一致,或者,直至访问过所述目标哈希链表中的所有存储单元;
其中,在访问当前存储单元时,先从当前存储单元中读取第一版本标识,再从当前存储单元读取数据信息,然后再从当前存储单元中读取第二版本标识;
如果从当前存储单元中读取的第一版本标识与第二版本标识不一致,重新从所述目标哈希链表的链头开始访问所述目标哈希链表中的存储单元;
如果从当前存储单元中读取的第一版本标识与第二版本标识一致,根据当前存储单元存储的数据信息,判断当前存储单元的地址与所述目标地址是否一致,如果一致,则结束访问所述目标哈希链表;如果不一致,则访问当前存储单元的下一个存储单元。
3.根据权利要求1所述的方法,其特征在于,所述存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;所述第一版本标识具体为所述链表的第一版本标识,所述第二版本标识具体为所述链表的第二版本标识;每个哈希链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识;所述方法还包括:
根据目标地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头,所述目标地址为待查找存储单元的地址,所述目标哈希链表为所述待查找存储单元所在的哈希链表;
读取所述目标哈希链表的第一版本标识;
从所述目标哈希链表的链头开始依次访问所述目标哈希链表中的存储单元,直至访问到的存储单元的地址与所述目标地址一致,或者,直至访问过所述目标哈希链表中的所有存储单元;
其中,在访问当前存储单元时,从当前存储单元读取数据信息,然后读取所述目标哈希链表的第二版本标识,判断先读取的第一版本标识与后读取的第二版本标识是否一致,如果不一致,重新从所述目标哈希链表的链头开始访问所述目标哈希链表中的存储单元;如果一致,访问所述目标哈希链表中的下一存储单元。
4.一种更新存储区的方法,其特征在于,包括:
更新存储区的第二版本标识;
更新所述存储区中存储的数据信息;
更新所述存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;初始时所述第一版本标识与所述第二版本标识保持一致;读所述存储区时,所述第二版本标识的读取发生在读取所述存储区存储的数据信息之后,所述第一版本标识的读取发生在读取所述存储区存储的数据信息之前。
5.根据权利要求4所述的方法,其特征在于:
在更新存储区的第二版本标识之前,还包括:获取存储区的写者互斥控制权;
在更新所述存储区的第一版本标识之后,还包括:释放存储区的写者互斥控制权。
6.根据权利要求5所述的方法,其特征在于,所述存储区包括多个存储单元,所述第一版本标识具体为所述存储单元的第一版本标识,所述第二版本标识具体为所述存储单元的第二版本标识;
每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识以及所述存储单元的写者互斥控制权;所述方法还包括:
获取空闲链表的写者互斥控制权,在所述空闲链表中删除指定的空闲存储单元,释放所述空闲链表的写者互斥控制权;
根据所述空闲存储单元的地址的哈希值,确定目标哈希链表和所述目标哈希链表的链头,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;
如果将所述空闲存储单元插入到所述目标哈希链表的链头,获取所述目标哈希链表的链头的写者互斥控制权,否则获取所述空闲存储单元插入到所述目标哈希链表后,在所述目标哈希链表中所述空闲存储单元的前一个存储单元的写者互斥控制权;
获取所述空闲存储单元的写者互斥控制权,更新所述空闲存储空闲单元中存储的第二版本标识,将所述空闲存储单元插入到所述目标哈希链表,更新所述空闲存储空闲单元中存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述空闲存储单元的写者互斥控制权,释放所述目标哈希链表中所述空闲存储单元的前一个存储单元的写者互斥控制权或释放所述目标哈希链表的链头的写者互斥控制权。
7.根据权利要求5所述的方法,其特征在于,所述存储区包括多个存储单元,所述第一版本标识具体为所述存储单元的第一版本标识,所述第二版本标识具体为所述存储单元的第二版本标识;
每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识以及所述存储单元的写者互斥控制权;所述方法还包括:
根据目标地址的哈希值,确定目标哈希链表和所述目标哈希链表的链头,所述目标地址为待释放存储单元的地址,所述目标哈希链表为所述待释放存储单元所在的哈希链表;
访问所述目标哈希链表的链头时,获取所述目标哈希链表的链头的写者互斥控制权,从所述目标哈希链表的链头中存储的地址索引值对应的所述目标哈希链表中第一个存储单元中,读取为所述第一个存储单元分配的地址;如果所述目标哈希链表的第一个存储单元的地址与所述目标地址一致,更新所述目标哈希链表的链头的第二版本标识,将所述目标哈希链表的链头存储的地址索引值更新为所述目标哈希链表的第一个存储单元中存储的地址索引值,更新所述目标哈希链表的链头的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;
如果所述目标哈希链表的第一个存储单元的地址与所述目标地址不一致,访问所述目标哈希链表中的下一个存储单元,直至访问的当前存储单元的地址与所述目标地址一致;
其中,访问除所述第一个存储单元之外的当前存储单元时,从所述当前存储单元读取为所述当前存储单元分配的地址,在访问的当前存储单元的地址与所述目标地址一致时,更新所述当前存储单元的前一个存储单元存储的第二版本标识,将所述当前存储单元的前一个存储单元存储的地址索引值修改为所述当前存储单元存储的地址索引值,更新所述当前存储单元的前一个存储单元存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;
释放所述目标哈希链表的链头的写者互斥控制权;
获取查找到的存储单元的写者互斥控制权和空闲链表的写者互斥控制权,更新所述查找到的存储单元的第二版本标识,将所述查找到的存储单元插入到所述空闲链表,更新所述查找到的存储单元的第一版本标识,释放所述查找到的存储单元的写者互斥控制权和所述空闲链表的互斥控制权。
8.根据权利要求5所述的方法,其特征在于,所述存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;所述第一版本标识具体为所述链表的第一版本标识,所述第二版本标识具体为所述链表的第二版本标识;每个链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识;所述方法还包括:
获取空闲链表的写者互斥控制权,在所述空闲链表中删除指定的空闲存储单元,释放所述空闲链表的写者互斥控制权;
根据所述空闲存储单元的地址的哈希值,确定目标哈希链表,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;
获取所述目标哈希链表的写者互斥控制权,更新所述目标哈希链表的第二版本标识,将所述空闲存储单元插入到所述目标哈希链表,更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述目标哈希链表的写者互斥控制权。
9.根据权利要求5所述的方法,其特征在于,所述存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;所述第一版本标识具体为所述链表的第一版本标识,所述第二版本标识具体为所述链表的第二版本标识;每个链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识;所述方法还包括:
根据所述空闲存储单元的地址的哈希值,确定目标哈希链表,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;
获取所述目标哈希链表的写者互斥控制权,在所述目标哈希链表中查找地址与所述目标地址一致的存储单元,更新所述目标哈希链表的第二版本标识,在所述目标哈希链表中删除查找到的存储单元,更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述目标哈希链表的写者互斥控制权;
获取空闲链表的写者互斥控制权,将查找到的存储单元插入到所述空闲链表,释放所述空闲链表的互斥控制权。
10.一种读存储区的装置,其特征在于,包括:
读取模块,用于读取存储区的第一版本标识,从所述存储区读取数据信息,读取所述存储区的第二版本标识;初始时所述第一版本标识与所述第二版本标识保持一致,更新所述存储区时,所述第一版本标识的更新发生在更新所述存储区的数据信息之后,所述第二版本标识的更新发生在更新所述存储区的数据信息之前;
确定模块,用于如果所述读取模块读取的第一版本标识与第二版本标识不一致,确定在读取所述第一版本标识到读取所述第二版本标识的过程中,所述存储区发生读写冲突,重复执行上述步骤,直至所述第一版本标识与所述第二版本标识保持一致时,确定所述存储区没有发生读写冲突。
11.根据权利要求10所述的装置,其特征在于,所述存储区包括多个存储单元,所述第一版本标识具体为所述存储单元的第一版本标识,所述第二版本标识具体为所述存储单元的第二版本标识;
每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识;
所述读取模块,还用于根据目标地址的哈希值,确定目标哈希链表的链头,所述目标地址为待查找存储单元的地址,所述目标哈希链表为所述待查找存储单元所在的哈希链表;
所述读取模块,还用于从所述目标哈希链表的链头开始依次访问所述目标哈希链表中的存储单元,直至访问到的存储单元的地址与所述目标地址一致,或者,直至访问过所述目标哈希链表中的所有存储单元;
所述读取模块,还用于在访问当前存储单元时,先从当前存储单元中读取第一版本标识,再从当前存储单元读取数据信息,然后再从当前存储单元中读取第二版本标识;
所述确定模块,还用于如果从当前存储单元中读取的第一版本标识与第二版本标识不一致,使所述读取模块重新从所述目标哈希链表的链头开始访问所述目标哈希链表中的存储单元;
所述确定模块,还用于如果从当前存储单元中读取的第一版本标识与第二版本标识一致,根据当前存储单元存储的数据信息,判断当前存储单元的地址与所述目标地址是否一致,如果一致,则结束访问所述目标哈希链表;如果不一致,则使所述读取模块访问当前存储单元的下一个存储单元。
12.根据权利要求10所述的装置,其特征在于,所述存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;所述第一版本标识具体为所述链表的第一版本标识,所述第二版本标识具体为所述链表的第二版本标识;每个哈希链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识;
所述读取模块,还用于根据目标地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头,所述目标地址为待查找存储单元的地址,所述目标哈希链表为所述待查找存储单元所在的哈希链表;
所述读取模块,还用于读取所述目标哈希链表的第一版本标识;
所述读取模块,还用于从所述目标哈希链表的链头开始依次访问所述目标哈希链表中的存储单元,直至访问到的存储单元的地址与所述目标地址一致,或者,直至访问过所述目标哈希链表中的所有存储单元;
所述读取模块,还用于在访问当前存储单元时,从当前存储单元读取数据信息,然后读取所述目标哈希链表的第二版本标识;
所述确定模块,还用于判断先读取的第一版本标识与后读取的第二版本标识是否一致,如果不一致,使所述读取模块重新从所述目标哈希链表的链头开始访问所述目标哈希链表中的存储单元;如果一致,使所述读取模块访问所述目标哈希链表中的下一存储单元。
13.一种更新存储区的装置,其特征在于,用于更新存储区的第二版本标识,更新所述存储区中存储的数据信息,更新所述存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;初始时所述第一版本标识与所述第二版本标识保持一致;读所述存储区时,所述第二版本标识的读取发生在读取所述存储区存储的数据信息之后,所述第一版本标识的读取发生在读取所述存储区存储的数据信息之前。
14.根据权利要求13所述的装置,其特征在于,所述装置包括:
更新模块,用于更新存储区的第二版本标识,更新所述存储区中存储的数据信息,更新所述存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;初始时所述第一版本标识与所述第二版本标识保持一致;读所述存储区时,所述第二版本标识的读取发生在读取所述存储区存储的数据信息之后,所述第一版本标识的读取发生在读取所述存储区存储的数据信息之前;
所述更新模块,还用于在更新存储区的第二版本标识之前,获取存储区的写者互斥控制权;
释放模块,用于在所述更新模块更新所述存储区的第一版本标识之后,释放存储区的写者互斥控制权。
15.根据权利要求14所述的装置,其特征在于,所述存储区包括多个存储单元,所述第一版本标识具体为所述存储单元的第一版本标识,所述第二版本标识具体为所述存储单元的第二版本标识;
每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识以及所述存储单元的写者互斥控制权;
所述更新模块,还用于获取空闲链表的写者互斥控制权,在所述空闲链表中删除指定的空闲存储单元;
所述释放模块,还用于在在所述空闲链表中删除指定的空闲存储单元后,释放所述空闲链表的写者互斥控制权;
所述更新模块,还用于根据所述空闲存储单元的地址的哈希值,确定目标哈希链表和所述目标哈希链表的链头,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;
所述更新模块,还用于如果将所述空闲存储单元插入到所述目标哈希链表的链头,获取所述目标哈希链表的链头的写者互斥控制权,否则获取所述空闲存储单元插入到所述目标哈希链表后,在所述目标哈希链表中所述空闲存储单元的前一个存储单元的写者互斥控制权;
所述更新模块,还用于获取所述空闲存储单元的写者互斥控制权,更新所述空闲存储空闲单元中存储的第二版本标识,将所述空闲存储单元插入到所述目标哈希链表,更新所述空闲存储空闲单元中存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,
所述释放模块,还用于更新所述空闲存储空闲单元中存储的第一版本标识后,释放所述空闲存储单元的写者互斥控制权,释放所述目标哈希链表中所述空闲存储单元的前一个存储单元的写者互斥控制权或释放所述目标哈希链表的链头的写者互斥控制权。
16.根据权利要求14所述的装置,其特征在于,所述存储区包括多个存储单元,所述第一版本标识具体为所述存储单元的第一版本标识,所述第二版本标识具体为所述存储单元的第二版本标识;
每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识以及所述存储单元的写者互斥控制权;
所述装置还包括读取模块;
所述更新模块,还用于根据目标地址的哈希值,确定目标哈希链表和所述目标哈希链表的链头,所述目标地址为待释放存储单元的地址,所述目标哈希链表为所述待释放存储单元所在的哈希链表;
所述读取模块,用于访问所述目标哈希链表的链头时,获取所述目标哈希链表的链头的写者互斥控制权,从所述目标哈希链表的链头中存储的地址索引值对应的所述目标哈希链表中第一个存储单元中,读取为所述第一个存储单元分配的地址;
所述更新模块,还用于如果所述目标哈希链表的第一个存储单元的地址与所述目标地址一致,更新所述目标哈希链表的链头的第二版本标识,将所述目标哈希链表的链头存储的地址索引值更新为所述目标哈希链表的第一个存储单元中存储的地址索引值,更新所述目标哈希链表的链头的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;
所述读取模块,还用于如果所述目标哈希链表的第一个存储单元的地址与所述目标地址不一致,访问所述目标哈希链表中的下一个存储单元,直至访问的当前存储单元的地址与所述目标地址一致;
所述读取模块,还用于访问除所述第一个存储单元之外的当前存储单元时,从所述当前存储单元读取为所述当前存储单元分配的地址;
所述更新模块,还用于在访问的当前存储单元的地址与所述目标地址一致时,更新所述当前存储单元的前一个存储单元存储的第二版本标识,将所述当前存储单元的前一个存储单元存储的地址索引值修改为所述当前存储单元存储的地址索引值,更新所述当前存储单元的前一个存储单元存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;释放所述目标哈希链表的链头的写者互斥控制权;
所述更新模块,还用于获取查找到的存储单元的写者互斥控制权和空闲链表的写者互斥控制权,更新所述查找到的存储单元的第二版本标识,将所述查找到的存储单元插入到所述空闲链表,更新所述查找到的存储单元的第一版本标识,释放所述查找到的存储单元的写者互斥控制权和所述空闲链表的互斥控制权。
17.根据权利要求14所述的装置,其特征在于,所述存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;所述第一版本标识具体为所述链表的第一版本标识,所述第二版本标识具体为所述链表的第二版本标识;每个链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识;
所述更新模块,还用于获取空闲链表的写者互斥控制权,在所述空闲链表中删除指定的空闲存储单元;
所述释放模块,还用于在所述空闲链表中删除指定的空闲存储单元后,释放所述空闲链表的写者互斥控制权;
所述更新模块,用于根据所述空闲存储单元的地址的哈希值,确定目标哈希链表,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;
所述更新模块,还用于获取所述目标哈希链表的写者互斥控制权,更新所述目标哈希链表的第二版本标识,将所述空闲存储单元插入到所述目标哈希链表,更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述目标哈希链表的写者互斥控制权。
18.根据权利要求14所述的装置,其特征在于,所述存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;所述第一版本标识具体为所述链表的第一版本标识,所述第二版本标识具体为所述链表的第二版本标识;每个链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识;
所述装置还包括读取模块;
所述更新模块,还用于根据所述空闲存储单元的地址的哈希值,确定目标哈希链表,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;
所述获取模块,还用于获取所述目标哈希链表的写者互斥控制权;
所述读取模块,用于获取所述目标哈希链表的写者互斥控制权后,在所述目标哈希链表中查找地址与所述目标地址一致的存储单元;
所述更新模块,还用于查找到地址与所述目标地址一致的存储单元时,更新所述目标哈希链表的第二版本标识,在所述目标哈希链表中删除查找到的存储单元,更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述目标哈希链表的写者互斥控制权;
所述更新模块,还用于获取空闲链表的写者互斥控制权,将查找到的存储单元插入到所述空闲链表,释放所述空闲链表的互斥控制权。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310100886.2A CN104077078B (zh) | 2013-03-26 | 2013-03-26 | 读存储区、更新存储区的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310100886.2A CN104077078B (zh) | 2013-03-26 | 2013-03-26 | 读存储区、更新存储区的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104077078A true CN104077078A (zh) | 2014-10-01 |
CN104077078B CN104077078B (zh) | 2017-07-07 |
Family
ID=51598365
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310100886.2A Active CN104077078B (zh) | 2013-03-26 | 2013-03-26 | 读存储区、更新存储区的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104077078B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105897589A (zh) * | 2015-02-12 | 2016-08-24 | 英特尔公司 | 用于cuckoo散列流查找的并发性的技术 |
CN106656865A (zh) * | 2016-10-28 | 2017-05-10 | 杭州迪普科技股份有限公司 | 一种管理链表资源的方法及装置 |
CN113254364A (zh) * | 2021-05-24 | 2021-08-13 | 山东创恒科技发展有限公司 | 一种嵌入式系统用信息存储装置 |
CN113867634A (zh) * | 2021-09-24 | 2021-12-31 | 北京百度网讯科技有限公司 | 数据读取方法、装置、电子设备及存储介质 |
CN117112244A (zh) * | 2023-08-22 | 2023-11-24 | 电子科技大学 | 一种面向混合实时性任务集的非对称stm同步方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6360219B1 (en) * | 1998-12-16 | 2002-03-19 | Gemstone Systems, Inc. | Object queues with concurrent updating |
EP1227480A2 (en) * | 2001-01-30 | 2002-07-31 | Pioneer Corporation | Method and apparatus for reading and writing information, and program storage medium for storage for storing read and write procedure program |
US20090204755A1 (en) * | 2008-02-08 | 2009-08-13 | Inetco Systems Limited | Multi-reader, multi-writer lock-free ring buffer |
CN101631328A (zh) * | 2009-08-14 | 2010-01-20 | 北京星网锐捷网络技术有限公司 | 一种对共享资源互斥访问的同步方法、装置和网络设备 |
-
2013
- 2013-03-26 CN CN201310100886.2A patent/CN104077078B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6360219B1 (en) * | 1998-12-16 | 2002-03-19 | Gemstone Systems, Inc. | Object queues with concurrent updating |
EP1227480A2 (en) * | 2001-01-30 | 2002-07-31 | Pioneer Corporation | Method and apparatus for reading and writing information, and program storage medium for storage for storing read and write procedure program |
US20090204755A1 (en) * | 2008-02-08 | 2009-08-13 | Inetco Systems Limited | Multi-reader, multi-writer lock-free ring buffer |
CN101631328A (zh) * | 2009-08-14 | 2010-01-20 | 北京星网锐捷网络技术有限公司 | 一种对共享资源互斥访问的同步方法、装置和网络设备 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105897589A (zh) * | 2015-02-12 | 2016-08-24 | 英特尔公司 | 用于cuckoo散列流查找的并发性的技术 |
CN105897589B (zh) * | 2015-02-12 | 2019-09-10 | 英特尔公司 | 用于cuckoo散列流查找的并发性的方法及设备 |
CN106656865A (zh) * | 2016-10-28 | 2017-05-10 | 杭州迪普科技股份有限公司 | 一种管理链表资源的方法及装置 |
CN106656865B (zh) * | 2016-10-28 | 2019-06-07 | 杭州迪普科技股份有限公司 | 一种管理链表资源的方法及装置 |
CN113254364A (zh) * | 2021-05-24 | 2021-08-13 | 山东创恒科技发展有限公司 | 一种嵌入式系统用信息存储装置 |
CN113254364B (zh) * | 2021-05-24 | 2022-07-19 | 山东创恒科技发展有限公司 | 一种嵌入式系统用信息存储装置 |
CN113867634A (zh) * | 2021-09-24 | 2021-12-31 | 北京百度网讯科技有限公司 | 数据读取方法、装置、电子设备及存储介质 |
CN117112244A (zh) * | 2023-08-22 | 2023-11-24 | 电子科技大学 | 一种面向混合实时性任务集的非对称stm同步方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104077078B (zh) | 2017-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11288252B2 (en) | Transactional key-value store | |
CN102541757B (zh) | 写缓存方法、缓存同步方法和装置 | |
US20180011893A1 (en) | Hash index | |
US8239343B2 (en) | Database reorganization technique | |
US20180011892A1 (en) | Foster twin data structure | |
US11100083B2 (en) | Read only bufferpool | |
CN103106286B (zh) | 元数据的管理方法和装置 | |
CN104021145A (zh) | 一种混合业务并发访问的方法和装置 | |
CN103229164B (zh) | 数据访问方法和装置 | |
CN104077078A (zh) | 读存储区、更新存储区的方法及装置 | |
CN114282074B (zh) | 数据库操作方法、装置、设备及存储介质 | |
CN103559319A (zh) | 分布式集群文件系统的缓存同步方法和设备 | |
CN103942301B (zh) | 一种面向多数据类型访问应用的分布式文件系统 | |
CN104573112A (zh) | Oltp集群数据库中页面查询方法及数据处理节点 | |
CN105469001B (zh) | 磁盘数据保护方法及装置 | |
CN109460406A (zh) | 一种数据处理方法及装置 | |
CN102024051B (zh) | 分布式内存数据库数据更新方法 | |
CN102768672B (zh) | 一种磁盘空间管理方法和装置 | |
US20180011897A1 (en) | Data processing method having structure of cache index specified to transaction in mobile environment dbms | |
US20010014932A1 (en) | Multi-processor system | |
CN109542860A (zh) | 基于hdfs的业务数据管理方法、终端设备 | |
CN110019130A (zh) | 一种数据库更新的方法及装置 | |
CN110515897B (zh) | Lsm存储系统读性能的优化方法及系统 | |
EP2824576B1 (en) | Method for managing database | |
KR20120082176A (ko) | 데이터베이스 관리 시스템의 데이터 처리 방법 및 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |