[发明专利]死锁检测方法、装置、设备及计算机可读存储介质在审
申请号: | 202010785310.4 | 申请日: | 2020-08-06 |
公开(公告)号: | CN111767155A | 公开(公告)日: | 2020-10-13 |
发明(设计)人: | 刘华星 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 北京市立方律师事务所 11330 | 代理人: | 张筱宁 |
地址: | 518000 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 死锁 检测 方法 装置 设备 计算机 可读 存储 介质 | ||
1.一种死锁检测方法,其特征在于,包括:
获取目标线程集合中的每一第一线程的线程标识,所述目标线程集合包括至少一个第一线程,所述第一线程在运行过程中处于阻塞状态;
对于每一第一线程,确定该第一线程等待占用的被锁对象,并确定占用所述被锁对象的第二线程的线程标识;
根据第一线程的线程标识、以及第二线程的线程标识,确定至少一个死锁组的标识,所述死锁组包括处于循环等待状态下的至少一个第一线程和至少一个第二线程。
2.根据权利要求1所述的方法,其特征在于,所述获取目标线程集合中的每一第一线程的线程标识,包括:
确定与所述目标线程集合对应的处于操作系统的第一层的线程对象;
通过反射方式得到所述线程对象中的成员对象;
通过所述成员对象,获取所述目标线程集合中的每一第一线程的线程标识。
3.根据权利要求2所述的方法,其特征在于,所述通过所述成员对象,获取所述目标线程集合中的每一第一线程的线程标识,包括:
通过所述成员对象,确定所述线程对象处于所述操作系统的第二层的地址;
根据所述线程对象处于第二层的地址和预设的地址偏移量,确定所述目标线程集合中的每一第一线程的线程标识的存储地址;
从每一第一线程的线程标识的存储地址,获取每一第一线程的线程标识。
4.根据权利要求3所述的方法,其特征在于,所述第一层包括应用框架层,所述第二层包括系统运行库层。
5.根据权利要求1所述的方法,其特征在于,所述确定该第一线程等待占用的被锁对象,包括:
调用预设的第一函数,确定该第一线程等待占用的被锁对象,所述第一函数包括私有函数GetContendedMonitor。
6.根据权利要求1所述的方法,其特征在于,所述确定占用所述被锁对象的第二线程的线程标识,包括:
调用预设的第二函数,确定占用所述被锁对象的第二线程的线程标识的存储地址,所述第二函数包括内部函数GetLockOwnerThreadId;
从所述第二线程的线程标识的存储地址,获取所述第二线程的线程标识。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述根据第一线程的线程标识、以及第二线程的线程标识,确定死锁组的标识,包括:
检测各个第一线程以及各个第二线程之间存在的循环等待状态;
对于检测到的每一种循环等待状态,将处于该循环等待状态下的至少一个第一线程和至少一个第二线程的各线程标识,构成一个死锁组的标识。
8.一种死锁检测装置,其特征在于,包括:
第一处理模块,用于获取目标线程集合中的每一第一线程的线程标识,所述目标线程集合包括至少一个第一线程,所述第一线程在运行过程中处于阻塞状态;
第二处理模块,用于对于每一第一线程,确定该第一线程等待占用的被锁对象,并确定占用所述被锁对象的第二线程的线程标识;
第三处理模块,用于根据第一线程的线程标识、以及第二线程的线程标识,确定至少一个死锁组的标识,所述死锁组包括处于循环等待状态下的至少一个第一线程和至少一个第二线程。
9.一种电子设备,其特征在于,包括:处理器、存储器;
所述存储器,用于存储计算机程序;
所述处理器,用于通过调用所述计算机程序,执行如权利要求1-7中任一项所述的死锁检测方法。
10.一种计算机可读存储介质,其特征在于,存储有计算机程序,所述计算机程序用于被处理器执行时实现如权利要求1-7中任一项所述的死锁检测方法。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010785310.4/1.html,转载请声明来源钻瓜专利网。