[发明专利]多线程访问方法及装置有效
申请号: | 201810327454.8 | 申请日: | 2018-04-12 |
公开(公告)号: | CN108762941B | 公开(公告)日: | 2020-09-08 |
发明(设计)人: | 杨亮;陈少杰;张文明 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 北京众达德权知识产权代理有限公司 11570 | 代理人: | 刘杰 |
地址: | 430000 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 多线程 访问 方法 装置 | ||
1.一种多线程访问方法,其特征在于,所述方法包括:
响应于线程对函数对象的访问,调用全局锁的全局临界区对象对全局键值对表进行加锁,所述全局锁配置在预先创建的全局变量中,所述全局键值对表包括锁对象和与其对应的键值之间的对应关系;
获取线程调用所述全局锁加锁时的键值;
根据所述加锁时的键值查找所述全局键值对表,以获取与该键值对应的锁对象;
调用所述全局锁的全局临界区对象对所述全局键值对表进行解锁;
判定所述线程是否已经获取到所述锁对象;
若所述线程已经获取到所述锁对象,则对所述锁对象对应的加锁次数计数器加一;
若所述线程没有获取到所述锁对象,则调用所述锁对象为所述线程访问的函数对象进行加锁。
2.根据权利要求1所述的方法,其特征在于,当所述线程完成对所述函数对象的访问后,所述方法还包括:
调用全局锁的全局临界区对象对所述全局键值对表进行加锁;
获取线程调用所述全局锁解锁时的键值;
根据所述解锁时的键值查找所述全局键值对表,以获取与该键值对应的锁对象;
判定所述线程是否已经获取到所述锁对象;
若所述线程已经获取到所述锁对象,则对所述锁对象对应的加锁次数计数器减一;
调用所述全局锁的全局临界区对象对所述全局键值对表进行解锁。
3.根据权利要求2所述的方法,其特征在于,所述判定所述线程是否已经获取到所述锁对象,包括:
判定所述锁对象对应的标识字段中是否存在所述线程的线程标识,所述标识字段用于记录获取到所述锁对象的线程的线程标识;
若所述标识字段中存在所述线程的线程标识,则确定所述线程获取到锁对象。
4.根据权利要求3所述的方法,其特征在于,在调用所述锁对象为所述线程访问的函数对象进行加锁之后,所述方法还包括:
将所述线程的线程标识添加到所述锁对象对应的标识字段。
5.根据权利要求3所述的方法,其特征在于,在对所述锁对象对应的加锁次数计数器减一之后,所述方法还包括:
当所述加锁次数计数器的计数值更新为0时,将所述锁对象对应的标识字段进行初始化,并调用所述锁对象为所述线程访问的函数对象进行解锁。
6.根据权利要求1或2所述的方法,其特征在于,若没有从所述全局键值对表中查找到与加锁时的键值对应的锁对象,则创建新的锁对象,为创建的锁对象生成用于记录当前线程加锁次数的加锁次数计数器;以及
将创建的新的锁对象、该锁对象与指定的键值之间的对应关系添加到所述全局键值对表。
7.根据权利要求2所述的方法,其特征在于,所述全局键值对表中的每一锁对象设置有用于记录引用次数的引用计数;
在所述判定所述线程是否已经获取到所述锁对象之前,所述方法还包括:
对获取到的锁对象对应的引用计数进行加一;
相应的,在对所述锁对象对应的加锁次数计数器减一之后,所述方法还包括:
对获取到的锁对象对应的引用计数进行减一;
根据更新后的引用计数判定所述锁对象是否存在线程调用,若所述锁对象不存在线程调用,则释放所述锁对象,并从所述全局键值对表中移除所述锁对象、所述锁对象与对应键值之间的对应关系。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810327454.8/1.html,转载请声明来源钻瓜专利网。
- 上一篇:多线程访问方法及装置
- 下一篇:多线程访问方法及装置