发明名称 一种并发哈希表的无锁操作方法
摘要 为了提升多线程对哈希表操作的高效性,本发明提供一种并发哈希表的无锁操作方法。当需要对哈希表进行插入操作时,首先构造新增的值对象,并将对象中的next指针指向键值对应的哈希槽中的指针指向的对象,同时利用原子操作将对应哈希槽中的指针指向新增的对象;当需要对哈希表进行删除操作时,利用原子操作将对应的对象从链表中移除;当需要对哈希表进行更新操作时,首先构造需要更新的对象的副本,并进行更新,同时原子地将更新后的对象插入到链表中;对于删除对象的回收,利用Hazard指针实现。
申请公布号 CN106055646A 申请公布日期 2016.10.26
申请号 CN201610377615.5 申请日期 2016.05.31
申请人 国家计算机网络与信息安全管理中心 发明人 卫冰洁;王啸;熊刚;贺欣;石俊峥;刘培朋;李镇;周立;王秀文;贺龙涛;李晓倩;袁媛;朱佳伟;李城龙;张慧;曹首峰;于贺威;王大伟;刘阳
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 北京理工大学专利中心 11120 代理人 高燕燕
主权项 一种并发哈希表的无锁操作方法,包括插入操作、更新操作、删除操作;其特征在于,其中:插入操作具体包括如下步骤:1.1获取新插入元素键值对应的哈希槽,执行1.2;1.2获取哈希槽中存储的链表的表头,执行1.3;1.3构造新的值对象,将对象的next指针指向1.2中获得的表头对象,执行1.4;1.4利用CAS操作将哈希槽中的指针指向新建的对象;更新操作具体包括如下步骤:2.1获取需要更新的元素的键值,执行2.2;2.2获取键值对应的哈希槽中存储的链表表头,执行2.3;2.3在链表中查找对应的需要更新的对象,执行2.4;2.4构造对象的副本,并进行更新,执行2.5;2.5将更新后的对象的next指针指向原对象的next指针指向的对象,执行2.6;2.6利用原子操作将新对象插入到链表中;删除操作具体包括如下步骤:3.1获取需要删除的元素的键值,执行3.2;3.2获取键值对应的哈希槽中存储的链表表头,执行3.3;3.3在链表中查找对应的需要删除的对象,执行3.4;3.4利用原子操作将需要删除对象的前一个对象的next指针指向删除对象的下一个对象。
地址 100029 北京市朝阳区裕民路甲3号