[发明专利]对象更新、读取方法及装置有效
申请号: | 202111358395.9 | 申请日: | 2021-11-17 |
公开(公告)号: | CN113791916B | 公开(公告)日: | 2022-02-08 |
发明(设计)人: | 洪春涛 | 申请(专利权)人: | 支付宝(杭州)信息技术有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 北京亿腾知识产权代理事务所(普通合伙) 11309 | 代理人: | 张明;周良玉 |
地址: | 310000 浙江省杭州市*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 对象 更新 读取 方法 装置 | ||
1.一种对象更新方法,应用于多核处理系统,所述多核处理系统包括多个CPU,每个CPU包括若干CPU核;待更新的第一对象是多个线程的共享对象;所述方法包括:
任意的第一CPU核的第一线程请求获取写锁;所述写锁用于表示对所述第一对象执行更新的权限;
读取第一指针,所述第一指针指向所述第一对象;
根据所述第一指针,读取所述第一对象并复制,得到第二对象;
对所述第二对象的内容进行调整,得到调整后的第二对象;
修改所述第一指针,以使其指向所述调整后的第二对象;
释放所述写锁;
针对所述调整后的第二对象,设置对应的第二标志位数组;
将所述第二标志位数组中的每个标志位分配给一个线程,并初始化每个标志位的取值;其中,初始化后的每个标志位的取值在对应线程开始访问所述调整后的第二对象时被修改,且在结束访问时被恢复。
2.根据权利要求1所述的方法,还包括:
申请第二内存区域;
将调整后的第二对象以及所述第二标志位数组按照先后顺序,连续存放在所述第二内存区域;
所述修改所述第一指针包括:
将所述第一指针的值修改为所述第二内存区域的地址。
3.根据权利要求1所述的方法,其中,所述读取第一指针,包括:
从所述第一CPU核的本地缓存中读取所述第一指针;或,
从第二CPU核的本地缓存中读取所述第一指针;或,
从内存中读取所述第一指针。
4.根据权利要求1所述的方法,还包括:
向其它CPU核的其它线程发送指针更新消息,以使所述其它线程更新其它CPU核的本地缓存中存储的修改前的所述第一指针。
5.根据权利要求1所述的方法,还包括:
根据所述第一指针,获取所述第一对象的第一地址;
将所述第一地址加入地址回收队列,所述地址回收队列用于存放无用对象的地址。
6.根据权利要求5所述的方法,还包括:
回收线程从所述回收队列中读取所述第一地址;所述回收线程为任一负责回收无用对象的线程;
判断所述第一地址对应的所述第一对象是否满足删除条件;
在所述第一对象满足删除条件的情况下,删除所述第一对象。
7.根据权利要求6所述的方法,所述判断所述第一地址对应的所述第一对象是否满足删除条件,包括:
遍历所述第一对象的第一标志位数组中的每个标志位的取值是否均为初始值;其中,所述第一标志位数组中的每个标志位对应于一个线程,其对应取值为初始值指示对应线程未访问所述第一对象;
若是,则确定所述第一对象满足删除条件。
8.根据权利要求1所述的方法,其中,针对所述第一指针的读取为原子操作。
9.一种对象读取方法,应用于多核处理系统,所述多核处理系统包括多个CPU,每个CPU包括若干CPU核;待读取的第一对象是多个线程的共享对象;所述方法包括:
任意的第一CPU核的第一线程读取第一指针,所述第一指针指向所述第一对象;所述第一对象具有对应的第一标志位数组,其中的每个标志位对应于一个线程;
根据所述第一指针,读取所述第一标志位数组中对应于所述第一线程的第一标志位;
将所述第一标志位的取值修改为预定值;所述预定值指示所述第一线程正在访问所述第一对象;
读取所述第一对象;
在读取所述第一对象后,将所述第一标志位的取值恢复为初始值。
10.根据权利要求9所述的方法,其中,所述第一对象和所述第一标志位数组按照先后顺序存储在第一内存区域中;所述第一指针的值为所述第一内存区域的地址。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于支付宝(杭州)信息技术有限公司,未经支付宝(杭州)信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111358395.9/1.html,转载请声明来源钻瓜专利网。