线程死锁检测方法、装置、设备、介质和计算机程序产品制造方法及图纸

技术编号:32357389 阅读:12 留言:0更新日期:2022-02-20 03:19
本申请涉及一种线程死锁检测方法、装置、设备、介质和计算机程序产品。所述方法包括:获取目标线程对目标锁的操作指令,在操作指令为申请目标锁的情况下,则调用预设的目标程序根据操作指令申请目标锁,得到用于表示是否成功申请目标锁的申请结果;调用目标程序根据申请结果确定目标线程的死锁结果。无需人工介入,能够实时检测目标线程申请目标锁时是否存在死锁情况,而且采用多种编程语言通用的预设的目标程序实现死锁的检测,解决了通用性较差的问题,并且无需更改程序代码,降低了安全风险。本方法兼顾了实时性、通用性和安全性。通用性和安全性。通用性和安全性。

【技术实现步骤摘要】
线程死锁检测方法、装置、设备、介质和计算机程序产品


[0001]本申请涉及计算机
,特别是涉及一种线程死锁检测方法、装置、设备、介质和计算机程序产品。

技术介绍

[0002]在计算机系统运行过程中会出现线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
[0003]现有技术对如何检测死锁可以通过修改Pthreads库方法、pstack结合gdp以及了Java特定的线程死锁检测机制实现Linux系统运行过程中是否出现死锁状态。
[0004]然而,目前的线程死锁检测方式存在无法兼顾检测的实时性、安全性和通用性的问题。

技术实现思路

[0005]基于此,有必要针对上述技术问题,提供一种能够兼顾检测的实时性、安全性和通用性的线程死锁检测方法、装置、设备、介质和计算机程序产品。
[0006]第一方面,本申请提供了一种线程死锁检测方法。该方法包括:
[0007]获取目标线程对目标锁的操作指令;
[0008]在操作指令为申请目标锁的情况下,则调用预设的目标程序根据操作指令申请目标锁,得到申请结果;申请结果用于表示是否成功申请目标锁;
[0009]调用目标程序根据申请结果确定目标线程的死锁结果。
[0010]在其中一个实施例中,调用预设的目标程序根据操作指令申请目标锁,得到申请结果,包括:
[0011]根据操作指令,调用预设的目标程序查找线程图中目标锁的线程持有状态;
[0012]根据目标锁的线程持有状态,确定目标线程申请目标锁的申请结果。
[0013]在其中一个实施例中,根据目标锁的线程持有状态,确定目标线程申请目标锁的申请结果,包括:
[0014]若目标锁的持有状态为被已有线程持有,则申请结果为申请失败;
[0015]若目标锁的持有状态为未被已有线程持有,则申请结果为申请成功。
[0016]在其中一个实施例中,根据申请结果,确定目标线程的死锁结果,包括:
[0017]若申请结果为申请成功,则确定目标线程的死锁结果为无死锁,并将目标线程和目标锁的对应关系更新至线程图中;
[0018]若申请结果为失败,则检测线程图中是否存在有向循环图,得到检测结果;
[0019]根据检测结果确定目标线程的死锁结果。
[0020]在其中一个实施例中,根据检测结果确定目标线程的死锁结果,包括:
[0021]若检测结果为线程图中存在有向循环图,则确定死锁结果为死锁;
[0022]若检测结果为线程图中不存在有向循环图,则确定死锁结果为无死锁。
[0023]在其中一个实施例中,操作指令表示释放目标锁;方法还包括:
[0024]根据操作指令,调用预设的目标程序删除线程图中目标线程与目标锁之间的对应关系。
[0025]第二方面,本申请还提供了一种线程死锁检测装置。该装置包括:
[0026]获取模块,用于获取目标线程对目标锁的操作指令;
[0027]第一调用模块,用于在操作指令为申请目标锁的情况下,则调用预设的目标程序根据操作指令申请目标锁,得到申请结果;申请结果用于表示是否成功申请目标锁;
[0028]第二调用模块,用于调用目标程序根据申请结果确定目标线程的死锁结果。
[0029]第三方面,本申请还提供了一种计算机设备。该计算机设备包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述第一方面任一项实施例中方法的步骤。
[0030]第四方面,本申请还提供了一种计算机可读存储介质。该计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述第一方面任一项实施例中方法的步骤。
[0031]第五方面,本申请还提供了一种计算机程序产品。该计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述第一方面任一项实施例中方法的步骤。
[0032]上述线程死锁检测方法、装置、设备、介质和计算机程序产品,通过获取目标线程对目标锁的操作指令,在操作指令为申请目标锁的情况下,则调用预设的目标程序根据操作指令申请目标锁,得到用于表示是否成功申请目标锁的申请结果;调用目标程序根据申请结果确定目标线程的死锁结果。无需人工介入,能够实时检测目标线程申请目标锁时是否存在死锁情况,而且采用多种编程语言通用的预设的目标程序实现死锁的检测,解决了通用性较差的问题,并且无需更改程序代码,降低了安全风险。本方法兼顾了实时性、通用性和安全性。
附图说明
[0033]图1为一个实施例中线程死锁方法的流程示意图;
[0034]图2为一个实施例中线程死锁方法的流程示意图;
[0035]图3为另一个实施例中线程死锁方法的流程示意图;
[0036]图4为一个实施例中线程死锁示意图;
[0037]图5为一个实施例中线程无死锁示意图;
[0038]图6为另一个实施例中线程死锁方法的流程示意图;
[0039]图7为一个实施例中线程死锁检测装置的结构框图;
[0040]图8为一个实施例中线程死锁检测装置的结构框图;
[0041]图9为一个实施例中计算机设备的内部结构图。
具体实施方式
[0042]为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不
用于限定本申请。
[0043]在计算机系统运行过程中会出现线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。因此需要对线程死锁进行检测。现有技术中,包括几种方式,能够实现对Linux系统运行过程中是否出现死锁状态进行检测。第一种为修改Pthreads库方法:在Linux操作系统中修改C程序所用的Pthreads库,添加新的同步互斥函数,编译生成新的Pthreads库,在所述Linux操作系统中修改与原同步互斥函数相关的系统头文件,使用宏定义将原同步互斥函数指向新的同步互斥函数,用户使用原同步互斥函数和新的Pthreads库共同编写、编译和运行多线程的C程序,死锁检测程序从计算机共享内存中获取上述多线程的C程序的运行数据来检测死锁。第二种为pstack结合gdp人为分析方法:通过pstack查看进程执行堆栈,然后通过gdp人为查看进程等待的锁被谁持有,进而判断是否存在死锁现象。第三种为Java死锁检测:Java由于能够动态获取锁的拥有者,利用其独特的死锁检测算法,能够实时检测死锁。但是,由于修改Pthreads库方法需要对Pthread库代码进行修改,有代码侵入的风险;pstack结合gdp的方式需要不停的人为干预,不能保证在线实时检测;除了Java有其特定的死锁检测机制以外,其它语本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种线程死锁检测方法,其特征在于,所述方法包括:获取目标线程对目标锁的操作指令;在所述操作指令为申请目标锁的情况下,则调用预设的目标程序根据所述操作指令申请所述目标锁,得到申请结果;所述申请结果用于表示是否成功申请所述目标锁;调用所述目标程序根据所述申请结果确定所述目标线程的死锁结果。2.根据权利要求1所述的方法,其特征在于,所述调用预设的目标程序根据所述操作指令申请所述目标锁,得到申请结果,包括:根据所述操作指令,调用所述预设的目标程序查找线程图中所述目标锁的线程持有状态;根据所述目标锁的线程持有状态,确定所述目标线程申请所述目标锁的申请结果。3.根据权利要求2所述的方法,其特征在于,所述根据所述目标锁的线程持有状态,确定所述目标线程申请所述目标锁的申请结果,包括:若所述目标锁的持有状态为被已有线程持有,则所述申请结果为申请失败;若所述目标锁的持有状态为未被已有线程持有,则所述申请结果为申请成功。4.根据权利要求3所述的方法,其特征在于,所述根据所述申请结果,确定所述目标线程的死锁结果,包括:若所述申请结果为申请成功,则确定所述目标线程的死锁结果为无死锁,并将所述目标线程和所述目标锁的对应关系更新至所述线程图中;若所述申请结果为失败,则检测所述线程图中是否存在有向循环图,得到检测结果;根据所述检测结果确定所述目标线程的死锁结果。5.根据权利要求4所述的方法...

【专利技术属性】
技术研发人员:何晴
申请(专利权)人:上海浦东发展银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1