CN109213576B - 程序死锁检测方法、存储介质、设备及*** - Google Patents

程序死锁检测方法、存储介质、设备及*** Download PDF

Info

Publication number
CN109213576B
CN109213576B CN201710528372.5A CN201710528372A CN109213576B CN 109213576 B CN109213576 B CN 109213576B CN 201710528372 A CN201710528372 A CN 201710528372A CN 109213576 B CN109213576 B CN 109213576B
Authority
CN
China
Prior art keywords
thread
function
creating
program
creating function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201710528372.5A
Other languages
English (en)
Other versions
CN109213576A (zh
Inventor
杨亮
陈少杰
张文明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hubei Central China Technology Development Of Electric Power Co ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201710528372.5A priority Critical patent/CN109213576B/zh
Priority to PCT/CN2017/117366 priority patent/WO2019006997A1/zh
Publication of CN109213576A publication Critical patent/CN109213576A/zh
Application granted granted Critical
Publication of CN109213576B publication Critical patent/CN109213576B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明涉及操作***领域,公开了一种程序死锁检测方法、存储介质、设备及***,该方法包括S1:在线程的线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数中均加入一hook函数;S2:通过hook函数分别获取线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数所对应的当前线程以及当前线程的线程ID;S3:将获取的线程、线程ID以及获取的线程所拥有的资源存储于全局字段中;S4:根据全局字段中的线程ID,调用***的等待函数获取全局字段中每个线程所等待的资源;S5:从全局字段中任取两个线程进行死锁判断。本发明能够对程序的死锁进行及时而有效的检测。

Description

程序死锁检测方法、存储介质、设备及***
技术领域
本发明涉及操作***领域,具体涉及一种程序死锁检测方法、存储介质、设备及***。
背景技术
Windows操作***中运行的应用程序,通常会创建多个线程来分担自身运行时的逻辑运算,从而有效提高应用程序自身的运行效率。但是,在多线程的运算处理环境下,在对某些全局数据进行读写时极易出现线程间冲突的现象,针对线程间冲突的问题,Windows操作***提供了一系列的线程同步与互斥方法来解决线程间冲突问题,例如,信号事件、临界区、互斥体等方法都可以用来进行线程的同步和互斥,但随着线程同步与互斥方法的使用,随之带来的便是应用程序运行过程中线程的死锁问题,死锁是指两个或两个以上的线程在执行过程中,彼此之间由于资源的竞争或彼此间的通信造成的一种阻塞想象,若无其它外力作用,线程将一直处于等待状态,此时程序便处于死锁状态,这些永远处于互相等待状态的线程称为死锁线程,若无法及时得知程序发生了死锁,从而针对程序的死锁问题进行有效解决,将极大地影响程序的后续运行。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种程序死锁检测方法,能够对程序是否发生死锁进行及时有效的判断,本发明还提供一种程序死锁检测***,能够对程序的死锁进行有效检测,从而及时而有效的对程序是否发生死锁进行判断。
为达到以上目的,本发明采取的技术方案是,包括:
S1:在线程的线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数中均加入一hook函数;
S2:当线程句柄创建函数、信号事件创建函数、互斥体创建函数或临界区创建函数分别相应地进行线程、信号事件、互斥体或临界区的创建时,通过hook函数分别获取线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数所对应的当前线程以及当前线程的线程ID;
S3:将获取的线程、线程ID以及获取的线程所拥有的资源存储于全局字段中;
S4:根据全局字段中的线程ID,调用***的等待函数获取全局字段中每个线程所等待的资源;
S5:从全局字段中任取两个线程,若其中第一个线程所等待的资源为第二个线程所拥有的资源,且第二个线程所等待的资源为第一个线程所拥有的资源,则程序发生死锁,若否,则程序未发生死锁。
在上述技术方案的基础上,所述资源包括内存物理地址、磁盘扇区、cpu和操作***的OS资源。
在上述技术方案的基础上,S2具体为:
当线程句柄创建函数进行线程的创建时,通过hook函数获得创建线程时返回的线程句柄值、句柄创建函数对应的当前线程以及当前线程的线程ID;
当信号事件创建函数进行信号事件的创建时,通过hook函数获得信号事件创建时返回的信号事件句柄值、信号事件创建函数对应的当前线程以及当前线程的线程ID;
当互斥体创建函数进行互斥体的创建时,通过hook函数获得创建互斥体时返回的互斥体句柄值、互斥体创建函数对应的当前线程以及当前线程的线程ID;
当临界区创建函数进行临界区的创建时,通过hook函数获得创建临界区时返回的临界区句柄值、临界区创建函数对应的当前线程以及当前线程的线程ID。
在上述技术方案的基础上,
所述hook函数还用于加入等待函数中;
当等待函数运行时,通过hook函数获取线程所等待的资源。
在上述技术方案的基础上,S4中,获取的线程所等待的资源的信息存储于全局字典中。
本发明还提供一种存储介质,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时所述实现程序死锁检测方法。
本发明还提供一种程序死锁检测设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述实现程序死锁检测方法。
本发明还提供一种程序死锁检测***,包括:
注入模块,其用于向线程的线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数中均注入一hook函数;
获取模块,其用于当线程句柄创建函数、信号事件创建函数、互斥体创建函数或临界区创建函数分别相应地进行线程、信号事件、互斥体或临界区的创建时,通过hook函数分别获取线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数所对应的当前线程以及当前线程的线程ID,所述获取模块还用于获取当前线程所等待的资源;
存储模块,其用于将获取模块获取的线程和线程ID存储于全局字段中,所述存储模块还用于将获取的线程所拥有的资源存储于全局字段中;
判断模块,其用于从全局字段中任取两个线程,若其中第一个线程所等待的资源为第二个线程所拥有的资源,且第二个线程所等待的资源为第一个线程所拥有的资源,则程序发生死锁,若否,则程序未发生死锁。
在上述技术方案的基础上,所述资源包括内存物理地址、磁盘扇区、cpu和操作***的OS资源。
在上述技术方案的基础上,所述注入模块还用于向***的等待函数中注入hook函数,当等待函数运行时,通过hook函数获取线程所等待的资源。
与现有技术相比,本发明的优点在于:在线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数中注入hook函数的方式,通过hook函数分别获取线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数所对应的当前线程以及当前线程的线程ID,从而快速而便捷的获取线程所拥有的资源以及所等待的资源,便于及时的对线程间闭环依赖关系的判断,达到当程序出现死锁时,能够及时得知的目的,便于及时对死锁程序进行处理。
附图说明
图1为本发明实施例中一种程序死锁检测方法的流程图;
图2为本发明实施例中一种程序死锁检测设备的结构示意图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
参见图1所示,本发明实施例提供一种程序死锁检测方法,用于当程序采用线程的同步和互斥机制进行多线程运行时,判断程序是否发生死锁,线程的同步和互斥机制包括信号事件、临界区、互斥体、以及线程句柄,程序运行于Windows操作***上,且本发明实施例的程序死锁检测方法基于Windows操作***完成。对于发生死锁的程序,必然存在一个环路等待条件,如线程P1正在等待一个线程P2占用的资源,而线程P2正在等待一个线程P1占用的资源,此种情况下便会出现程序的死锁。
对于信号事件机制,信号事件有两种状态,一种是有信号状态,另一种是无信号状态,线程在等待一个无信号状态的信号事件是会出现阻塞的情况。对于当前的线程,通过调用***的信号事件创建函数CreateEvent来创建一个信号事件,通过调用等待函数WaitForSingleObject来等待一个信号事件,即可获知当前线程所等待的资源。
对于互斥体机制,互斥体有两种状态,一种是空闲状态,另一种是被占用状态,线程在等待一个空闲状态的互斥体时,该互斥体变成被占用状态,但该线程不会被阻塞,但当一个线程等待一个被占用状态的互斥体时,该线程就会被阻塞。对于当前的线程,通过调用互斥体创建函数来创建一个互斥体,通过***的调用等待函数WaitForSingleObject来等待一个互斥体,即可获知当前线程所等待的资源。
对于临界区机制,临界区有两种状态,一种是进入状态,另一种是未进入状态,线程在等待一个未进入状态的临界区时,该临界区变成进入状态,但是该线程不会被阻塞,但是线程等待一个进入状态时的临界区时,该线程就会被阻塞。对于当前的线程,通过调用***的临界区创建函数来创建一个临界区,通过调用等待函数WaitForSingleObject来等待一个临界区,即可获知当前线程所等待的资源。
对于线程句柄机制,通过调用***的线程句柄创建函数创建一个线程时,会得到一个线程句柄,在创建的线程未退出之前,线程句柄是无信号状态,当创建的线程运行结束后,线程句柄变成有信号状态。
资源包括内存物理地址、磁盘扇区、cpu和操作***的OS(Operating System,操作***)资源,即程序在运行的过程中所要运用到的硬件资源和软件资源。
本发明实施例的一种程序死锁检测方法具体包括:
S1:在线程的线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数中均加入一hook函数(钩子函数),从而使线程句柄创建函数CreateThread变成CreateThreadHook函数,信号事件创建函数CreateEvent变成CreateEventHook函数,互斥体创建函数CreateMutex变成CreateMutexHook函数,临界区创建函数InitializeCriticalSection变成InitializeCriticalSectionHook函数。
S2:当线程句柄创建函数、信号事件创建函数、互斥体创建函数或临界区创建函数分别相应地进行线程、信号事件、互斥体或临界区的创建时,通过hook函数分别获取线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数所对应的当前线程以及当前线程的线程ID。
具体的:
当线程句柄创建函数进行线程的创建时,通过hook函数获得创建线程时返回的线程句柄值、句柄创建函数对应的当前线程以及当前线程的线程ID。因线程句柄创建函数CreateThread变成CreateThreadHook函数,因此当程序在调用CreateThread函数时,便会进入到CreateThreadHook函数中,从而通过CreateThreadHook函数获取创建线程时返回的线程句柄值、句柄创建函数对应的当前线程以及当前线程的线程ID。
当信号事件创建函数进行信号事件的创建时,通过hook函数获得信号事件创建时返回的信号事件句柄值、信号事件创建函数对应的当前线程以及当前线程的线程ID。因信号事件创建函数CreateEvent变成CreateEventHook函数,因此当程序在调用CreateEvent函数时,便会进入到CreateEventHook函数中,从而通过CreateEventHook函数获得信号事件创建时返回的信号事件句柄值、信号事件创建函数对应的当前线程以及当前线程的线程ID。
当互斥体创建函数进行互斥体的创建时,通过hook函数获得创建互斥体时返回的互斥体句柄值、互斥体创建函数对应的当前线程以及当前线程的线程ID。因互斥体创建函数CreateMutex变成CreateMutexHook函数,因此当程序在调用CreateMutex函数时,便会进入到CreateMutexHook函数中,从而通过CreateMutexHook函数获取创建互斥体时返回的互斥体句柄值、互斥体创建函数对应的当前线程以及当前线程的线程ID。
当临界区创建函数进行临界区的创建时,通过hook函数获得创建临界区时返回的临界区句柄值、临界区创建函数对应的当前线程以及当前线程的线程ID。因临界区创建函数InitializeCriticalSection变成InitializeCriticalSectionHook函数,因此当程序在调用InitializeCriticalSection函数时,便会进入到InitializeCriticalSectionHook函数中,从而通过InitializeCriticalSectionHook函数获得创建临界区时返回的临界区句柄值、临界区创建函数对应的当前线程以及当前线程的线程ID。
S3:将获取的线程、线程ID以及获取的线程所拥有的资源存储于全局字段ResourctDict中,线程所拥有的资源为线程在运行时的当前所占有的资源;
S4:根据全局字段中的线程ID,调用***的等待函数WaitForSingleObject获取全局字段中每个线程所等待的资源,线程所等待的资源为线程接下来继续运行时所要使用到的资源。具体的:
hook函数还用于加入等待函数WaitForSingleObject中;当等待函数WaitForSingleObject运行时,通过hook函数获取线程所等待的资源。同时,获取的线程所等待的资源的信息存储于全局字典ResourceWaitDict中。
至此,线程所拥有的资源和所等待的资源分别分属于全局字段和全局字典中,分开保存,便于后续的对程序是否发生死锁进行判断。
S5:从全局字段中任取两个线程,若其中第一个线程所等待的资源为第二个线程所拥有的资源,且第二个线程所等待的资源为第一个线程所拥有的资源,则程序发生死锁,有效而及时的对程序死锁现象的出现进行检测,从而便于后续的及时处理,若否,则程序未发生死锁。即任意两个线程中,第一个线程所等待的资源为第二个线程所拥有的资源,且第二个线程所等待的资源为第一个线程所拥有的资源,则程序发生死锁,若任意两线程间不存在此种关系,则程序未发生死锁。
具体举例说明,对于全局字段中的线程A和线程B,线程A等待线程B中创建的信号事件,而线程B又依赖于线程A退出才将信号事件设置为有信号状态,即
ResourceDict[hThreadHandleA]=A
ResourceDict[hEvent]=B
并且有
ResourceWaitDict[A]=hEvent
ResourceWaitDict[B]=hThreadHandleA
因此可得到线程A所等待的资源的拥有者线程为线程B,线程BA所等待的资源的拥有者线程为线程A,因此便检测到线程间出现闭环的依赖关系,从而程序发生死锁现象。
本发明的一种程序死锁检测方法的原理在于,通过在线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数中注入hook函数的方式,当线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数分别进行线程、信号事件、互斥体和临界区的创建时,通过hook函数分别获取线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数所对应的当前线程以及当前线程的线程ID,从而快速而便捷的获取线程所拥有的资源以及所等待的资源,便于及时的对线程间闭环依赖关系的判断,从而及时得知程序是否出现死锁现象,及时判断,及时处理,有效保证程序的有序运行。
另外,对应上述程序死锁检测方法,本发明还提供一种存储介质,存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述各实施例所述的程序死锁检测方法的步骤。需要说明的是,所述存储介质包括U盘、移动硬盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。
参见图2所示,对应上述程序死锁检测方法,本发明还提供一种程序死锁检测设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程序时实现上述各实施例的程序死锁检测步骤。
本发明还公开了一种基于上述程序死锁检测方法的程序死锁检测***,包括注入模块、获取模块、存储模块和判断模块。
注入模块用于向线程的线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数中均注入一hook函数;获取模块用于当线程句柄创建函数、信号事件创建函数、互斥体创建函数或临界区创建函数分别相应地进行线程、信号事件、互斥体或临界区的创建时,通过hook函数分别获取线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数所对应的当前线程以及当前线程的线程ID,所述获取模块还用于获取当前线程所等待的资源;存储模块用于将获取模块获取的线程和线程ID存储于全局字段中,所述存储模块还用于将获取的线程所拥有的资源存储于全局字段中;判断模块用于从全局字段中任取两个线程,若其中第一个线程所等待的资源为第二个线程所拥有的资源,且第二个线程所等待的资源为第一个线程所拥有的资源,则程序发生死锁,若否,则程序未发生死锁。
其中,资源包括内存物理地址、磁盘扇区、cpu和操作***的OS资源。同时,注入模块还用于向***的等待函数WaitForSingleObject中注入hook函数,当等待函数WaitForSingleObject运行时,通过hook函数获取线程所等待的资源。
本发明的一种程序死锁检测***的原理在于,注入模块向线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数中注入hook函数的方式,当线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数分别进行线程、信号事件、互斥体和临界区的创建时,通过hook函数分别获取线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数所对应的当前线程以及当前线程的线程ID,从而快速而便捷的获取线程所拥有的资源以及所等待的资源,便于判断模块及时的对线程间闭环依赖关系的判断,从而及时得知程序是否出现死锁想象,给后续的程序死锁处理争取时间,有效保证程序的有序运行。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (7)

1.一种程序死锁检测方法,用于当程序采用线程的同步和互斥机制进行多线程运行时,判断程序是否发生死锁,所述线程的同步和互斥机制包括信号事件、临界区、互斥体、以及线程句柄,所述程序运行于Windows操作***上,其特征在于,包括:
S1:在线程的线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数中均加入一hook函数,从而使线程句柄创建函数CreateThread变成CreateThreadHook函数,信号事件创建函数CreateEvent变成CreateEventHook函数,互斥体创建函数CreateMutex变成CreateMutexHook函数,临界区创建函数InitializeCriticalSection变成InitializeCriticalSectionHook函数;
S2:当线程句柄创建函数、信号事件创建函数、互斥体创建函数或临界区创建函数分别相应地进行线程、信号事件、互斥体或临界区的创建时,通过hook函数分别获取线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数所对应的当前线程以及当前线程的线程ID;
S3:将获取的线程、线程ID以及获取的线程所拥有的资源存储于全局字段中;
S4:根据全局字段中的线程ID,调用***的等待函数获取全局字段中每个线程所等待的资源,并将获取的线程所等待的资源的信息存储于全局字典中;
S5:从全局字段中任取两个线程,若其中第一个线程所等待的资源为第二个线程所拥有的资源,且第二个线程所等待的资源为第一个线程所拥有的资源,则程序发生死锁,若否,则程序未发生死锁;
其中,所述hook函数还加入于等待函数WaitForSingleObject中,当等待函数WaitForSingleObject运行时,通过所述hook函数获取线程所等待的资源。
2.如权利要求1所述的一种程序死锁检测方法,其特征在于:所述资源包括内存物理地址、磁盘扇区、cpu和操作***的OS资源。
3.如权利要求1所述的一种程序死锁检测方法,其特征在于,S2具体为:
当线程句柄创建函数进行线程的创建时,通过hook函数获得创建线程时返回的线程句柄值、句柄创建函数对应的当前线程以及当前线程的线程ID;
当信号事件创建函数进行信号事件的创建时,通过hook函数获得信号事件创建时返回的信号事件句柄值、信号事件创建函数对应的当前线程以及当前线程的线程ID;
当互斥体创建函数进行互斥体的创建时,通过hook函数获得创建互斥体时返回的互斥体句柄值、互斥体创建函数对应的当前线程以及当前线程的线程ID;
当临界区创建函数进行临界区的创建时,通过hook函数获得创建临界区时返回的临界区句柄值、临界区创建函数对应的当前线程以及当前线程的线程ID。
4.一种存储介质,该存储介质上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1至3任一项所述的方法。
5.一种程序死锁检测设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,其特征在于:所述处理器执行所述计算机程序时实现权利要求1至3任一项所述的方法。
6.一种程序死锁检测***,用于当程序采用线程的同步和互斥机制进行多线程运行时,判断程序是否发生死锁,所述线程的同步和互斥机制包括信号事件、临界区、互斥体、以及线程句柄,所述程序运行于Windows操作***上,其特征在于,包括:
注入模块,其用于向线程的线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数中均注入一hook函数,从而使线程句柄创建函数CreateThread变成CreateThreadHook函数,信号事件创建函数CreateEvent变成CreateEventHook函数,互斥体创建函数CreateMutex变成CreateMutexHook函数,临界区创建函数InitializeCriticalSection变成InitializeCriticalSectionHook函数;以及向***的等待函数WaitForSingleObject中注入hook函数,当等待函数WaitForSingleObject运行时,通过hook函数获取线程所等待的资源;
获取模块,其用于当线程句柄创建函数、信号事件创建函数、互斥体创建函数或临界区创建函数分别相应地进行线程、信号事件、互斥体或临界区的创建时,通过hook函数分别获取线程句柄创建函数、信号事件创建函数、互斥体创建函数和临界区创建函数所对应的当前线程以及当前线程的线程ID,所述获取模块还用于根据全局字段中的线程ID,调用***的等待函数获取全局字段中每个线程所等待的资源;
存储模块,其用于将获取模块获取的线程和线程ID存储于全局字段中,所述存储模块还用于将获取的线程所拥有的资源存储于全局字段中,以及获取的线程所等待的资源的信息存储于全局字典中;
判断模块,其用于从全局字段中任取两个线程,若其中第一个线程所等待的资源为第二个线程所拥有的资源,且第二个线程所等待的资源为第一个线程所拥有的资源,则程序发生死锁,若否,则程序未发生死锁。
7.如权利要求6所述的一种程序死锁检测***,其特征在于:所述资源包括内存物理地址、磁盘扇区、cpu和操作***的OS资源。
CN201710528372.5A 2017-07-01 2017-07-01 程序死锁检测方法、存储介质、设备及*** Active CN109213576B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201710528372.5A CN109213576B (zh) 2017-07-01 2017-07-01 程序死锁检测方法、存储介质、设备及***
PCT/CN2017/117366 WO2019006997A1 (zh) 2017-07-01 2017-12-20 程序死锁检测方法、存储介质、设备及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710528372.5A CN109213576B (zh) 2017-07-01 2017-07-01 程序死锁检测方法、存储介质、设备及***

Publications (2)

Publication Number Publication Date
CN109213576A CN109213576A (zh) 2019-01-15
CN109213576B true CN109213576B (zh) 2022-04-08

Family

ID=64950581

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710528372.5A Active CN109213576B (zh) 2017-07-01 2017-07-01 程序死锁检测方法、存储介质、设备及***

Country Status (2)

Country Link
CN (1) CN109213576B (zh)
WO (1) WO2019006997A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110837465A (zh) * 2019-10-15 2020-02-25 珠海金山网络游戏科技有限公司 一种基于Android的句柄泄露检测方法及其***
CN111831557B (zh) * 2020-06-19 2023-10-20 北京华三通信技术有限公司 死锁检测的方法及装置
CN111767155A (zh) * 2020-08-06 2020-10-13 腾讯科技(深圳)有限公司 死锁检测方法、装置、设备及计算机可读存储介质
CN112199203A (zh) * 2020-11-16 2021-01-08 奥士康科技股份有限公司 一种多表操作引起死锁的解决方法及***
CN114840847A (zh) * 2021-02-02 2022-08-02 武汉斗鱼鱼乐网络科技有限公司 在目标进程中安全创建线程的方法、装置、介质及设备
CN114035970B (zh) * 2022-01-10 2022-04-22 南京云信达科技有限公司 一种数据并发竞争冲突检测分析方法及***

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102222015A (zh) * 2010-04-13 2011-10-19 三星电子(中国)研发中心 检测多线程程序中的死锁的方法及***

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073588B (zh) * 2010-12-28 2013-11-20 北京邮电大学 一种基于代码静态分析的多线程死锁检测方法及***
CN102567096B (zh) * 2011-12-30 2017-02-08 中国科学院软件研究所 一种在多任务环境下防止死锁的互斥信号量管理方法
CN103246552B (zh) * 2012-02-14 2018-03-09 腾讯科技(深圳)有限公司 防止线程出现阻塞的方法和装置
JP2014119964A (ja) * 2012-12-17 2014-06-30 Hitachi Ltd 計算機システムおよびプログラム
US9477576B2 (en) * 2013-04-11 2016-10-25 International Business Machines Corporation Using application state data and additional code to resolve deadlocks
CN103761182A (zh) * 2013-12-26 2014-04-30 上海华为技术有限公司 一种死锁检测方法及装置
CN105511969B (zh) * 2015-11-25 2020-05-19 中国船舶工业***工程研究院 一种跨进程的线程间进行互斥的方法
CN106681811B (zh) * 2016-12-08 2021-09-14 腾讯科技(深圳)有限公司 基于线程池的多线程调度方法及装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102222015A (zh) * 2010-04-13 2011-10-19 三星电子(中国)研发中心 检测多线程程序中的死锁的方法及***

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
面向多线程程序的确定性并行关键技术研究;陈沉;《中国优秀博硕士学位论文全文数据库(博士)信息科技辑(月刊)》;20170215(第02期);第138-44页 *

Also Published As

Publication number Publication date
CN109213576A (zh) 2019-01-15
WO2019006997A1 (zh) 2019-01-10

Similar Documents

Publication Publication Date Title
CN109213576B (zh) 程序死锁检测方法、存储介质、设备及***
US11314562B2 (en) Systems and methods for performing concurrency restriction and throttling over contended locks
CA2663983C (en) Optimizing non-preemptible read-copy update for low-power usage by avoiding unnecessary wakeups
US8176489B2 (en) Use of rollback RCU with read-side modifications to RCU-protected data structures
US8839253B2 (en) System and method for load-adaptive mutual exclusion with waiting process counts
US8775837B2 (en) System and method for enabling turbo mode in a processor
CN102566979B (zh) 实现自适应锁的方法和装置以及多核处理器***
US20070271450A1 (en) Method and system for enhanced thread synchronization and coordination
US8495638B2 (en) Component-specific disclaimable locks
US10915424B2 (en) Defeating deadlocks in production software
CN103761182A (zh) 一种死锁检测方法及装置
US8769546B2 (en) Busy-wait time for threads
RU2746155C2 (ru) Уничтожение объекта на основе последовательности выполняемых действий
US8893137B2 (en) Transaction-based shared memory protection for high availability environments
CN109885489B (zh) 驱动程序中数据竞争检测方法及装置
US11269693B2 (en) Method, apparatus, and electronic device for improving CPU performance
CN111435314A (zh) 一种不阻塞线程等待异步消息的方法、***、服务器及存储介质
CN111052094A (zh) 使用c状态和睿频加速提高用户空间的自旋锁效率
CN111984428A (zh) 一种资源访问时自旋锁的实现方法、装置及设备
US20160320984A1 (en) Information processing device, parallel processing program and method for accessing shared memory
CN111767155A (zh) 死锁检测方法、装置、设备及计算机可读存储介质
US20080270812A1 (en) Asynchronous wakeup mechanism
KR20070047122A (ko) 멀티스래딩 제어 시스템 및 그 방법
CN112231131A (zh) 一种数据库锁的实现方法、装置、设备及可读存储介质
CN117648201A (zh) 进程管理方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20231222

Address after: No. 546, Luoyu Road, Hongshan District, Wuhan, Hubei Province, 430000

Patentee after: HUBEI CENTRAL CHINA TECHNOLOGY DEVELOPMENT OF ELECTRIC POWER Co.,Ltd.

Address before: 430000 East Lake Development Zone, Wuhan City, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building

Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right