[发明专利]用于进程中检测死锁的方法和设备有效
申请号: | 201710166450.1 | 申请日: | 2017-03-20 |
公开(公告)号: | CN107391265B | 公开(公告)日: | 2020-12-04 |
发明(设计)人: | 刘俊峰;姚文辉;朱家稷 | 申请(专利权)人: | 阿里巴巴集团控股有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 上海百一领御专利代理事务所(普通合伙) 31243 | 代理人: | 陈贞健;王路丰 |
地址: | 英属开曼群岛大开*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 用于 进程 检测 死锁 方法 设备 | ||
1.一种用于进程中检测死锁的方法,其中,所述方法包括:
基于若干执行线程所获取的锁生成对应节点,基于所述锁的种类及所述锁之间的获取顺序建立所述锁对应所述节点之间的有向边,基于所述节点及所述节点之间的有向边生成逻辑图;
当所述执行线程有状态为异常时,获取所述执行线程对应的逻辑图;
判断所述逻辑图是否为有向无环图,若否,则确定有死锁情况。
2.根据权利要求1所述的方法,其中,所述基于所述锁的种类及所述锁之间的获取顺序确定对应所述节点之间的有向边包括:
若所述锁为读锁,则判断是否有其他所述执行线程在等待写锁;
若是,则建立前一所述锁对应所述节点到所述写锁对应所述节点的有向边;
若否,则判断所述执行线程是否已获得所述读锁,若是则无需建立所述有向边,否则建立前一所述锁对应所述节点到所述读锁对应所述节点的有向边。
3.根据权利要求2所述的方法,其中,判断所述执行线程是否已获得所述读锁包括:
从所述读锁的记录信息中获取执行线程身份信息;
基于执行线程身份信息,确定所述执行线程已获得所述读锁。
4.根据权利要求1所述的方法,其中,所述基于所述锁的种类及所述锁之间的获取顺序确定对应所述节点之间的有向边包括:
若所述锁为可重入锁,则判断所述执行线程是否已获得所述可重入锁,若是则无需建立所述有向边,否则建立前一所述锁对应所述节点到所述可重入锁对应所述节点的有向边。
5.根据权利要求4所述的方法,其中,判断所述执行线程是否已获得所述可重入锁包括:
从所述可重入锁的记录信息中获取执行线程身份信息;
基于执行线程身份信息,确定所述执行线程已获得所述可重入锁。
6.根据权利要求1所述的方法,其中,所述基于所述锁的种类及所述锁之间的获取顺序确定对应所述节点之间的有向边还包括:
若所述锁为不可重入锁,则建立前一所述锁对应所述节点到所述不可重入锁对应所述节点的有向边。
7.根据权利要求1所述的方法,其中,所述当所述执行线程有状态为异常时,获取所述执行线程对应的逻辑图包括:
创建检测线程,利用所述检测线程定期检查所有所述执行线程的状态是否异常,当所述执行线程有状态为异常时,获取所述执行线程对应的逻辑图。
8.根据权利要求1所述的方法,其中,所述判断所述逻辑图是否为有向无环图包括:
基于遍历算法对所述逻辑图进行遍历;
若至少一个遍历路径存在至少一个所述节点被遍历至少两次,则确定所述逻辑图不是有向无环图,否则确定所述逻辑图是有向无环图。
9.一种用于进程中检测死锁的设备,其中,所述设备包括:
生成装置,用于基于若干执行线程所获取的锁生成对应节点,基于所述锁的种类及所述锁之间的获取顺序建立所述锁对应所述节点之间的有向边,基于所述节点及所述节点之间的有向边生成逻辑图;
确定装置,用于当所述执行线程有状态为异常时,获取所述执行线程对应的逻辑图;
判断装置,用于判断所述逻辑图是否为有向无环图,若否,则确定有死锁情况。
10.根据权利要求9所述的设备,其中,所述生成装置包括:
判断单元,用于若所述锁为读锁,则判断是否有其他所述执行线程在等待写锁;
第一建边单元,用于若有其他所述执行线程在等待写锁,则建立前一所述锁对应所述节点到所述写锁对应所述节点的有向边;
第二建边单元,用于若没有其他所述执行线程在等待写锁,则判断所述执行线程是否已获得所述读锁,若是则无需建立所述有向边,否则建立前一所述锁对应所述节点到所述读锁对应所述节点的有向边。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴集团控股有限公司,未经阿里巴巴集团控股有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710166450.1/1.html,转载请声明来源钻瓜专利网。