读存储区、更新存储区的方法及装置制造方法及图纸

技术编号:10492077 阅读:111 留言:0更新日期:2014-10-03 19:20
本发明专利技术实施例提供一种读存储区、更新存储区的方法及装置。其中读存储区的方法包括:读取存储区的第一版本标识,从存储区读取数据信息,读取存储区的第二版本标识;如果第一版本标识与第二版本标识不一致,确定在读取第一版本标识到读取第二版本标识的过程中,确定存储区发生读写冲突,重复执行上述步骤,直至先读取的第一版本标识与后读取的第二版本标识保持一致时,确定存储区没有发生读写冲突。更新存储区的方法,包括:更新存储区的第二版本标识;更新存储区中存储的数据信息;更新存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致。写并发执行不会使系统发生颠簸,读写操作可以在同一个存储区并发执行。

【技术实现步骤摘要】
读存储区、更新存储区的方法及装置
本专利技术实施例涉及计算机技术,尤其涉及一种读存储区、更新存储区的方法及装置。
技术介绍
在多核时代,由于处理器的主频提升遇到了瓶颈,计算机主要通过并行运算来提高运行速度。在并行计算过程中,往往需要对共享的存储区进行读写操作,当两个以上内核同时在同一段存储区上执行多条读取和写入指令的时候,由于系统总线上的多个读写操作指令可能会以任意的组合顺序执行,将会导致程序的执行结果与两段读写指令分开执行时不一致。现有技术一提供的方案,如Hibernate方案,使用乐观锁和操作系统提供的信号量来控制读写冲突,或者使用乐观锁和硬件lock指令来控制读写冲突。在数据库为数据增加一个“version”字段填充数据的版本号。在读取出数据时,将此版本号一同读出。之后更新数据时,对此版本号加一。在提交数据时,将版本号与数据库记录的当前版本号进行比较,如果提交的版本号大于数据库记录的当前版本号,则予以更新,否则认为是过期数据。乐观锁的具体使用流程为:①使用操作系统提供的信号量或硬件lock指令对即将读取的存储区进行加锁操作;②T1时刻从存储区读取数据和版本号version;③将本文档来自技高网...
读存储区、更新存储区的方法及装置

【技术保护点】
一种读存储区的方法,其特征在于,包括:读取存储区的第一版本标识,从所述存储区读取数据信息,读取所述存储区的第二版本标识;初始时所述第一版本标识与所述第二版本标识保持一致,更新所述存储区时,所述第一版本标识的更新发生在更新所述存储区的数据信息之后,所述第二版本标识的更新发生在更新所述存储区的数据信息之前;如果所述第一版本标识与所述第二版本标识不一致,确定在读取所述第一版本标识到读取所述第二版本标识的过程中,所述存储区发生读写冲突,重复执行上述步骤,直至所述第一版本标识与所述第二版本标识保持一致时,确定所述存储区没有发生读写冲突。

【技术特征摘要】
1.一种读存储区的方法,其特征在于,包括:读取存储区的第一版本标识,从所述存储区读取数据信息,读取所述存储区的第二版本标识;初始时所述第一版本标识与所述第二版本标识保持一致,更新所述存储区时,所述第一版本标识的更新发生在更新所述存储区的数据信息之后,所述第二版本标识的更新发生在更新所述存储区的数据信息之前;如果所述第一版本标识与所述第二版本标识不一致,确定在读取所述第一版本标识到读取所述第二版本标识的过程中,所述存储区发生读写冲突,重复执行所述读取所述存储区的所述第一版本标识,从所述存储区读取所述数据信息,读取所述存储区的所述第二版本标识,直至所述第一版本标识与所述第二版本标识保持一致时,确定所述存储区没有发生读写冲突。2.根据权利要求1所述的方法,其特征在于,所述存储区包括多个存储单元,所述第一版本标识具体为所述存储单元的第一版本标识,所述第二版本标识具体为所述存储单元的第二版本标识;每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识;所述方法还包括:根据目标地址的哈希值,确定目标哈希链表的链头,所述目标地址为待查找存储单元的地址,所述目标哈希链表为所述待查找存储单元所在的哈希链表;从所述目标哈希链表的链头开始依次访问所述目标哈希链表中的存储单元,直至访问到的存储单元的地址与所述目标地址一致,或者,直至访问过所述目标哈希链表中的所有存储单元;其中,在访问当前存储单元时,先从当前存储单元中读取第一版本标识,再从当前存储单元读取数据信息,然后再从当前存储单元中读取第二版本标识;如果从当前存储单元中读取的第一版本标识与第二版本标识不一致,重新从所述目标哈希链表的链头开始访问所述目标哈希链表中的存储单元;如果从当前存储单元中读取的第一版本标识与第二版本标识一致,根据当前存储单元存储的数据信息,判断当前存储单元的地址与所述目标地址是否一致,如果一致,则结束访问所述目标哈希链表;如果不一致,则访问当前存储单元的下一个存储单元。3.根据权利要求1所述的方法,其特征在于,所述存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;所述第一版本标识具体为所述链表的第一版本标识,所述第二版本标识具体为所述链表的第二版本标识;每个哈希链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识;所述方法还包括:根据目标地址的哈希值,确定目标哈希链表并确定目标哈希链表的链头,所述目标地址为待查找存储单元的地址,所述目标哈希链表为所述待查找存储单元所在的哈希链表;读取所述目标哈希链表的第一版本标识;从所述目标哈希链表的链头开始依次访问所述目标哈希链表中的存储单元,直至访问到的存储单元的地址与所述目标地址一致,或者,直至访问过所述目标哈希链表中的所有存储单元;其中,在访问当前存储单元时,从当前存储单元读取数据信息,然后读取所述目标哈希链表的第二版本标识,判断先读取的第一版本标识与后读取的第二版本标识是否一致,如果不一致,重新从所述目标哈希链表的链头开始访问所述目标哈希链表中的存储单元;如果一致,访问所述目标哈希链表中的下一存储单元。4.一种更新存储区的方法,其特征在于,包括:更新存储区的第二版本标识;更新所述存储区中存储的数据信息;更新所述存储区的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;初始时所述第一版本标识与所述第二版本标识保持一致;读所述存储区时,所述第二版本标识的读取发生在读取所述存储区存储的数据信息之后,所述第一版本标识的读取发生在读取所述存储区存储的数据信息之前。5.根据权利要求4所述的方法,其特征在于:在更新存储区的第二版本标识之前,还包括:获取存储区的写者互斥控制权;在更新所述存储区的第一版本标识之后,还包括:释放存储区的写者互斥控制权。6.根据权利要求5所述的方法,其特征在于,所述存储区包括多个存储单元,所述第一版本标识具体为所述存储单元的第一版本标识,所述第二版本标识具体为所述存储单元的第二版本标识;每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识以及所述存储单元的写者互斥控制权;所述方法还包括:获取空闲链表的写者互斥控制权,在所述空闲链表中删除指定的空闲存储单元,释放所述空闲链表的写者互斥控制权;根据所述空闲存储单元的地址的哈希值,确定目标哈希链表和所述目标哈希链表的链头,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;如果将所述空闲存储单元插入到所述目标哈希链表的链头,获取所述目标哈希链表的链头的写者互斥控制权,否则获取所述空闲存储单元插入到所述目标哈希链表后,在所述目标哈希链表中所述空闲存储单元的前一个存储单元的写者互斥控制权;获取所述空闲存储单元的写者互斥控制权,更新所述空闲存储空闲单元中存储的第二版本标识,将所述空闲存储单元插入到所述目标哈希链表,更新所述空闲存储空闲单元中存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述空闲存储单元的写者互斥控制权,释放所述目标哈希链表中所述空闲存储单元的前一个存储单元的写者互斥控制权或释放所述目标哈希链表的链头的写者互斥控制权。7.根据权利要求5所述的方法,其特征在于,所述存储区包括多个存储单元,所述第一版本标识具体为所述存储单元的第一版本标识,所述第二版本标识具体为所述存储单元的第二版本标识;每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;每个存储单元的控制信息包括所述存储单元的第一版本标识和所述存储单元的第二版本标识以及所述存储单元的写者互斥控制权;所述方法还包括:根据目标地址的哈希值,确定目标哈希链表和所述目标哈希链表的链头,所述目标地址为待释放存储单元的地址,所述目标哈希链表为所述待释放存储单元所在的哈希链表;访问所述目标哈希链表的链头时,获取所述目标哈希链表的链头的写者互斥控制权,从所述目标哈希链表的链头中存储的地址索引值对应的所述目标哈希链表中第一个存储单元中,读取为所述第一个存储单元分配的地址;如果所述目标哈希链表的第一个存储单元的地址与所述目标地址一致,更新所述目标哈希链表的链头的第二版本标识,将所述目标哈希链表的链头存储的地址索引值更新为所述目标哈希链表的第一个存储单元中存储的地址索引值,更新所述目标哈希链表的链头的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;如果所述目标哈希链表的第一个存储单元的地址与所述目标地址不一致,访问所述目标哈希链表中的下一个存储单元,直至访问的当前存储单元的地址与所述目标地址一致;其中,访问除所述第一个存储单元之外的当前存储单元时,从所述当前存储单元读取为所述当前存储单元分配的地址,在访问的当前存储单元的地址与所述目标地址一致时,更新所述当前存储单元的前一个存储单元存储的第二版本标识,将所述当前存储单元的前一个存储单元存储的地址索引值修改为所述当前存储单元存储的地址索引值,更新所述当前存储单元的前一个存储单元存储的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致;释放所述目标哈希链表的链头的写者互斥控制权;获取查找到的存储单元的写者互斥控制权和空闲链表的写者互斥控制权,更新所述查找到的存储单元的第二版本标识,将所述查找到的存储单元插入到所述空闲链表,更新所述查找到的存储单元的第一版本标识,释放所述查找到的存储单元的写者互斥控制权和所述空闲链表的互斥控制权。8.根据权利要求5所述的方法,其特征在于,所述存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;所述第一版本标识具体为所述链表的第一版本标识,所述第二版本标识具体为所述链表的第二版本标识;每个链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识;所述方法还包括:获取空闲链表的写者互斥控制权,在所述空闲链表中删除指定的空闲存储单元,释放所述空闲链表的写者互斥控制权;根据所述空闲存储单元的地址的哈希值,确定目标哈希链表,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;获取所述目标哈希链表的写者互斥控制权,更新所述目标哈希链表的第二版本标识,将所述空闲存储单元插入到所述目标哈希链表,更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述目标哈希链表的写者互斥控制权。9.根据权利要求5所述的方法,其特征在于,所述存储区包括多个存储单元,每个存储单元存储的数据信息包括为所述存储单元分配的地址、和所述存储单元在哈希链表中的下一个存储单元的地址索引值;存储区包括多个哈希链表,地址的哈希值相同的非空闲存储单元组成了一个哈希链表;所述第一版本标识具体为所述链表的第一版本标识,所述第二版本标识具体为所述链表的第二版本标识;每个链表的控制信息包括所述链表的写者互斥控制权、第一版本标识和第二版本标识;所述方法还包括:根据所述空闲存储单元的地址的哈希值,确定目标哈希链表,所述目标哈希链表为所述空闲存储单元待插入的哈希链表;获取所述目标哈希链表的写者互斥控制权,在所述目标哈希链表中查找地址与目标地址一致的存储单元,更新所述目标哈希链表的第二版本标识,在所述目标哈希链表中删除查找到的存储单元,更新所述目标哈希链表的第一版本标识,使更新后的第一版本标识与更新后的第二版本标识保持一致,释放所述目标哈希链表的写者互斥控制权;获取空闲链表的写者互斥控制权,将查找到的存储单元插入到所述空闲链表,释放所述空闲链表的互斥控制权。10.一种读存储区的装置,其特征在于,包括:读取模块,用于读取存储区的第一版本标识,从所述存储区读取数据信息,读取所述存储区的第二版本标识;初始时所述第一版本标识与所述第二版本标识保持一致,更新所述存储区时,所述第一版本标识的更新发生在更新所述存储区的数据信息之后,所述第二版本标识的更新发生在更新所述存储区的数据信息之前;确定模块,用于如果所述读取模块读取的第一版本标识与第二版本标识不一致,确定在读取所述第一版本标识到读取所述第二版本标识的过程中,所述存储区发生读写冲突,重复执行所述读取所述存储区的所述第一版本标识,从所述存储区读取所述数据信息,读取所述存储区的所述第二版本标识,直至所述第一版本标识与所述第二版本标识保持一致时,确定所述存储区没有发生读写冲突。11.根据...

【专利技术属性】
技术研发人员:封泽希
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东;44

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

1