[发明专利]无锁参考计数在审
申请号: | 201880015203.4 | 申请日: | 2018-03-01 |
公开(公告)号: | CN110352406A | 公开(公告)日: | 2019-10-18 |
发明(设计)人: | 雷扎·亚达尼称;王海川;马林 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 计数器 父线程 子线程 数据结构 分层 无锁 更新 引用 参考 创建 指向 传递 | ||
1.一种计算机实现的参考计数方法,其特征在于,包括:
创建与父线程引用的对象对应的父线程计数器,所述父线程计数器包括分层计数器数据结构;创建子线程的子线程计数器,所述子线程计数器包括所述分层计数器数据结构,并将对所述对象的所述引用从所述父线程传递到所述子线程;
更新所述父线程计数器中的所述分层计数器数据结构以引用所述子线程计数器,并更新所述子线程计数器中的所述分层计数器数据结构以指向所述父线程计数器;
当所述子线程完成处理时通知所述父线程计数器。
2.根据权利要求1所述的计算机实现的方法,其特征在于:
创建所述父线程计数器包括初始化所述分层计数器数据结构,以将父计数值设置为初始值1,将所述父线程的状态设置为活动,将子项列表设置为空,并将指针设置为空;
创建所述子线程计数器包括初始化所述分层计数器数据结构,以将子计数值设置为初始值1,将所述父线程的状态设置为活动,将子项列表设置为空,并将指针设置为指向所述父线程计数器。
3.根据权利要求2所述的计算机实现的方法,其特征在于,更新所述分层计数器数据结构包括:
当所述父线程添加对所述对象的引用时,增加所述父线程计数器的所述父计数值;当父线程删除对所述对象的所述引用时,减少所述父线程计数器的所述父计数值;
当所述子线程添加对所述对象的引用时,增加所述子引用计数器的所述子计数值;当所述子线程删除对所述对象的所述引用时,减少所述子引用计数器的所述子计数值。
4.根据权利要求3所述的计算机实现的方法,其特征在于,还包括:
完成处理后,将所述父线程和所述子线程的所述状态从活动改变为非活动;
独立修改所述父线程和所述子线程中的子项列表,以添加或删除子计数器;
将用于新添加子项的所述指针设置为指向直接父计数器。
5.根据权利要求3所述的计算机实现的方法,其特征在于,删除对所述对象的所述引用包括:
根据所述子线程计数值确定所述子线程计数器是否已完成处理;
检查所述子线程计数器是否有所述子项列表;
为响应所述子线程计数器的所述子计数值为零、所述子线程计数器的所述子线程列表为空或所述子项列表中列出的所述子线程全部为非活动以及所述子线程的所述状态为非活动,删除对所述对象的所述引用。
6.根据权利要求5所述的计算机实现的方法,其特征在于,还包括:
根据所述父计数值确定所述父线程计数器是否已完成处理;
检查所述父线程中的所述指针;
释放所述存储器中的所述对象,以响应所述指针为空和所述父线程的所述状态为非活动。
7.根据权利要求1至6中任一项所述的计算机实现的方法,其特征在于,所述分层计数器数据结构包括计算对所述对象的所述引用数量的计数值,指示所述对象的状态为活动或非活动的变量、子计数器列表以及指向父计数器的指针。
8.根据权利要求7所述的计算机实现的方法,其特征在于:
指示对所述对象的所述引用数量的所述计数值由所述父线程和所述子线程中的一个独立修改;
所述状态从活动状态改变为非活动状态;
所述子计数器列表为所述线程中对应的一个线程标识各个子计数器;
在初始创建所述线程计数器中的一个时设置所述指针。
9.根据权利要求1至8中任一项所述的计算机实现的方法,其特征在于,所述父线程计数器和所述子线程计数器采用无锁参考计数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201880015203.4/1.html,转载请声明来源钻瓜专利网。
- 上一篇:计算机可读介质、计算系统、方法以及电子装置
- 下一篇:纠错码存储器