CN101295266B - 检测和解除死锁的方法、装置和*** - Google Patents

检测和解除死锁的方法、装置和*** Download PDF

Info

Publication number
CN101295266B
CN101295266B CN2008101115384A CN200810111538A CN101295266B CN 101295266 B CN101295266 B CN 101295266B CN 2008101115384 A CN2008101115384 A CN 2008101115384A CN 200810111538 A CN200810111538 A CN 200810111538A CN 101295266 B CN101295266 B CN 101295266B
Authority
CN
China
Prior art keywords
resource
stack
deadlock
task
module
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.)
Expired - Fee Related
Application number
CN2008101115384A
Other languages
English (en)
Other versions
CN101295266A (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.)
Huawei Digital Technologies Chengdu Co Ltd
Original Assignee
Huawei Symantec Technologies 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 Huawei Symantec Technologies Co Ltd filed Critical Huawei Symantec Technologies Co Ltd
Priority to CN2008101115384A priority Critical patent/CN101295266B/zh
Publication of CN101295266A publication Critical patent/CN101295266A/zh
Application granted granted Critical
Publication of CN101295266B publication Critical patent/CN101295266B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明实施例公开了一种检测和解除死锁的方法,所述检测死锁的方法包括:为任务设置栈;将所述任务所获的资源的资源标记依次压入栈;当所述任务释放所述资源时,将压入栈中的所述资源标记从栈中弹出;比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致,若不一致,则判定发生死锁。所述解除死锁的方法包括:停止任务运行;确定发生死锁的资源标记的位置,作为死锁位置;将死锁位置以上的资源标记,从栈中弹出并保存;将发生死锁的资源标记弹出,并释放该发生死锁的资源;将保存的资源标记压回栈。本发明实施例还提供一种检测和解除死锁的装置和***,可以及时发现任务死锁,并解除死锁,提高了软件的可靠性。

Description

检测和解除死锁的方法、装置和***
技术领域
本发明涉及计算机技术领域,尤其涉及一种在多任务情况下检测和解除死锁的方法、装置和***。
背景技术
随着计算机技术的发展,多任务、多线程或者多处理器的技术应用目前已经非常广泛。所述的多任务则是指同一个程序能有几个并发执行的路径,这些任务共享内存地址空间,可以并发异步执行。
由于计算机中的资源是有限的,为了保护共享资源,需要保证每次只有一个任务或者一个处理器访问共享资源。软件中使用的资源,就是共享内存中的一个位置,当一个任务获取资源之后,将在这个内存位置设置资源标记,此时,其他任务就不能获取该资源,而是持续等待,直到获取该资源。该任务使用完所述资源之后,需要进行释放资源操作,别的任务才能获取该资源。
但是资源的方法使用不当就有可能造成死锁。通常,出现死锁的情况有两种:
情况一:在同一软件中有两个并行的任务,任务1获取资源A,同时任务2获取资源B,当任务1试图在释放资源A之前获取资源B、而任务2试图在释放资源B之前获取资源A,那么任务1获取资源B和任务2获取资源A都不会成功,并且会一直等待下去,这样就会造成死锁。
情况二:如果一个任务获取了锁之后,没有释放这个锁,其他任务也就无法获取这个锁,造成其他任务无法运行,进而造成死锁。
在实现本发明的过程中,发明人发现现有技术中存在如下问题:
当程序中出现死锁现象后,软件将会丧失运行功能从而无法正常运行,进而造成软件的可靠性低,并给软件用户造成损失。
发明内容
一方面,本发明的实施例提供一种检测死锁的方法和装置,能够检测出程序中出现的死锁现象,提高软件的可靠性。
本发明的实施例检测死锁的方法采用以下技术方案:
一种检测死锁的方法,包括:
为任务设置栈;
将所述任务所获得资源的资源标记依次压入栈;
当所述任务释放所述资源时,将压入栈中的所述资源标记从栈中弹出;
比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致,若不一致,则判定发生死锁。
本发明的实施例检测死锁的装置采用以下技术方案:
一种检测死锁的装置,包括:
栈设置模块,用于为任务设置栈;
资源标记压入模块,用于当所述栈设置模块为任务设置栈后,将所述任务所获得资源的资源标记依次压入栈;
第一资源标记弹出模块,用于当所述任务释放所述资源时,将所述资源标记压入模块压入栈中的所述资源标记从栈中弹出;
第一比较模块,用于当所述第一资源标记弹出模块弹出资源标记时,比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致;
第一判断模块,用于根据所述第一比较模块的比较结果,判断是否发生死锁,若所述任务释放的资源的资源标记与所述从栈中弹出的资源标记不一致,则判定发生死锁。
本发明的实施例检测死锁的方法和装置,为任务设置栈,当任务获取资源时,将所获资源的资源标记依次压入栈,当任务释放资源时,将资源标记从栈中弹出,通过比较所释放资源的资源标记与所述从栈中弹出的资源标记是否一致来检测是否发生任务死锁。与现有技术相比,本发明检测死锁的方法能够在任务释放资源的时候,及时发现任务死锁,提高了软件的可靠性。
另一方面,本发明的实施例提供另外一种检测死锁的方法和装置,能够检测出程序中出现的死锁现象,提高软件的可靠性。
本发明的实施例检测死锁的方法采用以下技术方案:
一种检测死锁的方法,包括:
为任务设置栈;
将所述任务所获得资源的资源标记压入栈,所述资源标记包括资源的获取时间;
设置所述资源标记的存栈时间阈值;
根据当前的检测时间与资源的获取时间获取存栈时间;
将所述存栈时间与所述存栈时间阈值相比较,若存栈时间大于存栈时间阈值,则判定发生死锁。
本发明的实施例检测死锁的装置采用以下技术方案:
一种检测死锁的装置,包括:
栈设置模块,用于为任务设置栈;
资源标记压入模块,用于当栈设置模块为任务设置栈后,将所述任务所获得资源的资源标记压入栈,所述资源标记包括资源的获取时间;
时间阈值设置模块,用于设置资源标记的存栈时间阈值;
存栈时间获取模块,用于根据所述资源标记压入模块压入栈中的资源标记中的资源的获取时间与当前的检测时间获取存栈时间;
第二比较模块,用于将所述存栈时间获取模块获取的存栈时间与所述时间阈值设置模块设置的存栈时间阈值相比较;
第二判断模块,用于根据所述第二比较模块的比较结果,判断是否发生死锁,若所述存栈时间大于所述存栈时间阈值,则判定发生死锁。
本发明的实施例检测死锁的方法和装置,为任务设置栈,当任务获取资源时,将所获资源的资源标记压入栈,所述资源标记包括资源的获取时间;设置资源标记的存栈时间阈值,根据当前的检测时间与资源的获取时间获取存栈时间,通过比较所述存栈时间与所述存栈时间阈值来检测是否发生任务死锁。与现有技术相比,本发明检测死锁的方法能够及时发现任务死锁,提高了软件的可靠性。
再一方面,本发明的实施例提供一种解除死锁的方法和装置,该方法能够解除程序中出现的死锁现象,提高软件的可靠性。
本发明的实施例解除死锁的方法采用以下技术方案:
一种解除死锁的方法,为任务设置栈,将所述任务获得资源的资源标记依次压入栈,当检测到死锁时,所述方法包括:
停止任务运行;
确定发生死锁的资源标记的位置,作为死锁位置;
将死锁位置以上的资源标记,从栈中弹出并保存;
将发生死锁的资源标记弹出,并释放该发生死锁的资源;
将保存的资源标记压回栈。
本发明的实施例解除死锁的装置采用以下技术方案:
一种解除死锁的装置,包括:
任务停止模块,用于当检测到任务发生死锁时停止任务运行,其中,在检测到任务发生死锁之前为任务设置栈,将所述任务获得资源的资源标记依次压入栈;
死锁位置确定模块,用于当所述任务停止模块停止任务运行后确定发生死锁的资源标记的位置,作为死锁位置;
第二资源标记弹出模块,用于将所述死锁位置确定模块确定的死锁位置以上的资源标记,从栈中弹出并保存;
资源释放模块,用于当所述第二资源标记弹出模块完成弹出和保存操作后,将所述死锁位置确定模块确定的发生死锁的资源标记弹出,并释放该发生死锁的资源;
资源标记压回模块,用于当所述资源释放模块释放死锁的资源后将保存的资源标记压回栈。
本发明的实施例解除死锁的方法和装置,发生任务死锁后,首先停止任务的运行,确定发生死锁的资源标记的位置,作为死锁位置;然后,将死锁位置以上的资源标记从栈中弹出并保存;接着,将发生死锁的资源标记弹出,并释放该发生死锁的资源;最后,将保存的资源标记压回栈。与现有技术相比,本发明解除死锁的方法能够在发生任务死锁后停止任务的运行,将发生死锁的资源一步步释放掉,避免了软件运行状态的进一步恶化,提高了软件的可靠性。
再一方面,本发明的实施例提供一种检测和解除死锁的***,能够检测和解除程序中出现的死锁现象,提高软件的可靠性。
本发明的实施例检测和解除死锁的***采用以下技术方案:
一种检测和解除死锁的***,包括:
死锁检测装置,用于检测任务死锁;
死锁解除装置,用于当所述死锁检测模块检测到任务死锁后,解除任务死锁;
其中,所述死锁检测装置包括:
栈设置模块,用于为任务设置栈;
资源标记压入模块,用于当所述栈设置模块为任务设置栈后,将所述任务所获得资源的资源标记依次压入栈;
第一资源标记弹出模块,用于当所述任务释放所述资源时,将所述资源标记压入模块压入栈中的所述资源标记从栈中弹出;
第一比较模块,用于当所述第一资源标记弹出模块弹出资源标记时,比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致;
第一判断模块,用于根据所述第一比较模块的比较结果,判断是否发生死锁,若所述任务释放的资源的资源标记与所述从栈中弹出的资源标记不一致,则判定发生死锁。
本发明的实施例检测和解除死锁的***,能够对任务发生的死锁现象进行检测,在检测到任务死锁后,停止任务的运行,将发生死锁的资源一步步释放掉,避免了软件运行状态的进一步恶化,提高了软件的可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的检测死锁的方法流程图;
图2为本发明提供的检测死锁的方法实施例一流程图;
图3为本发明实施例提供的检测死锁的装置结构示意图;
图4为本发明实施例提供的检测死锁的方法流程图;
图5为本发明提供的检测死锁的方法实施例二流程图;
图6为本发明实施例提供的检测死锁的装置结构示意图;
图7为本发明实施例提供的解除死锁的方法流程图;
图8为本发明提供的解除死锁的方法实施例三流程图;
图9为本发明实施例提供的解除死锁的装置结构示意图;
图10为本发明实施例提供的检测和解除死锁的***结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的实施例提供一种检测和解除死锁的方法、装置和***。
下面结合附图和实施例对本发明作详细说明。
本发明的实施例提供一种检测死锁的方法,该方法能够检测出程序中出现的死锁现象,提高软件的可靠性。
如图1所示,所述方法包括:
S101:为任务设置栈;
S102:将所述任务所获的资源的资源标记依次压入栈;
S103:当所述任务释放所述资源时,将压入栈的所述资源标记从栈中弹出;
S104:比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致,若不一致,则判定发生死锁。
本发明的实施例检测死锁的方法,为任务设置栈,当任务获取资源时,将所获资源的资源标记依次压入栈,当任务释放资源时,将资源标记从栈中弹出,通过比较所释放资源的资源标记与所述从栈中弹出的资源标记是否一致来检测是否发生任务死锁。与现有技术相比,本发明检测死锁的方法能够在任务释放资源的时候,及时发现任务死锁,提高了软件的可靠性。
下面给出本发明检测死锁的方法具体实施例一:
以软件中两个并行的任务1和任务2为例,如图2所示,所述检测死锁的方法具体包括:
S201:为任务1和任务2各设置一个栈,任务1获取资源A和资源B,任务2获取资源C和资源D,资源A、B、C、D的资源标记分别为a、b、c、d;
其中,与任务1对应的为栈1,与任务2对应的为栈2。所述栈用于存储任务所获资源的资源标记,每个资源有一个唯一标识该资源的资源标记。
其中,获取所述四个资源的时间先后顺序为:资源A、资源B、资源C和资源D。每个资源与所述资源的资源标记存在一一对应的关系,在本实施例中,所述资源A、资源B、资源C、资源D的资源标记分别为a、b、c、d。在其它实施例中,资源A、资源B、资源C、资源D的资源标记可以用其它字母或数字标识。
S202:将资源标记a、b、c、d依次压入栈;
其中,所述资源标记包括资源在内存中的地址和资源的获取时间,不同的资源对应不同的资源标记,由资源的名称可以得知该资源的资源标记,也即该资源在内存中的地址和获取时间。按照步骤S201中获取资源的先后顺序,将资源A的资源标记a、资源B的资源标记b,依次压入栈1;将资源C的资源标记c、资源D的资源标记d,依次压入栈2。
S203:任务释放资源X时,从栈中弹出资源标记x;
当任务释放资源时,从栈中弹出一个资源标记x,其中x可能为a、b、c、d中的任一个。其中,所述资源标记弹出栈的顺序可以进行设置,可以与压入栈的顺序相同,也可以与压入栈的顺序相反。在本实施例中,将资源标记弹出栈的顺序设置为与压入栈的顺序相反。
即:资源标记弹出栈的顺序为:资源标记d、资源标记c、资源标记b、资源标记a。
S204:比较所述任务释放的资源X的资源标记与所述从栈中弹出的资源标记x是否一致,若不一致,则判定发生死锁。
由于资源与资源标记存在一一对应的关系,当释放资源时,只要知道所释放的资源的名称,即可得知该资源的资源标记。例如,当释放的资源为资源A时,由该资源的名称A即可得知该资源A的资源标记为资源标记a。
其中,资源标记弹出栈的顺序是固定的,而释放资源的顺序可以是随机的,对于本实施例来说,在释放资源时,比较所释放资源X的资源标记与从栈中弹出的资源标记x是否一致,也就是比较所释放资源X在内存中的地址和获取时间与从栈中弹出的资源标记x所包括的地址和获取时间是否一致。
例如:当释放的资源为资源A时,从栈中弹出一个资源标记,由于资源A的资源标记为a,比较所述栈中弹出的资源标记所包括的地址和获取时间与资源标记a所包括的地址和获取时间,若不一致,则发生任务死锁。
因而,利用本发明的实施例检测死锁的方法,在任务释放资源的时候,能够检测出程序中出现的死锁现象,提高了软件的可靠性。
与上述检测死锁的方法相对应,本发明的实施例还提供一种检测死锁的装置,该装置能够检测出程序中出现的死锁现象,提高软件的可靠性。
如图3所示,所述检测死锁的装置包括:栈设置模块301、资源标记压入模块302、第一资源标记弹出模块303及第一比较模块304。
在本实施例中,栈设置模块301用于为任务设置栈;资源标记压入模块302用于当所述栈设置模块301为任务设置栈后,将所述任务所获的资源的资源标记依次压入栈;第一资源标记弹出模块303用于当所述任务释放所述资源时,将所述资源标记压入模块302压入栈中的所述资源标记从栈中弹出;第一比较模块304用于当所述第一资源标记模块303弹出资源标记时,比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致。
本发明的实施例检测死锁的装置,栈设置模块301为任务设置栈,当任务获取资源时,资源标记压入模块302将所获资源的资源标记依次压入栈,当任务释放资源时,第一资源标记弹出模块303将资源标记从栈中弹出,第一比较模块304通过比较所释放资源的资源标记与所述从栈中弹出的资源标记是否一致,来检测是否发生任务死锁。与现有技术相比,本发明检测死锁的装置能够在任务释放资源的时候,及时发现任务死锁,提高了软件的可靠性。
如图3所示,所述检测死锁的装置还包括第一判断模块305,用于根据所述第一比较模块304的比较结果,判断是否发生死锁,若所释放资源的资源标记与所述从栈中弹出的资源标记不一致,则判定发生死锁。
对于本实施例检测死锁的装置,所述资源标记弹出栈的顺序与压入栈的顺序相同或相反;所述资源标记包括资源的地址和资源的获取时间,不同的资源对应不同的资源标记。
所述第一比较模块305,通过比较所释放资源的地址和获取时间与从栈中弹出的资源标记中包括的地址和获取时间是否一致,来比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致。
因而,利用本发明的实施例检测死锁的装置,能够检测出程序中出现的死锁现象,提高软件的可靠性。
本发明的实施例提供另外一种检测死锁的方法,该方法能够检测出程序中出现的死锁现象,提高软件的可靠性。
如图4所示,所述方法包括:
S401:为任务设置栈;
S402:将所述任务所获的资源的资源标记压入栈,所述资源标记包括资源的获取时间;
S403:设置资源标记的存栈时间阈值;
S404:根据当前的检测时间与资源的获取时间获取存栈时间;
S405:将所述存栈时间与所述存栈时间阈值相比较,若存栈时间大于存栈时间阈值,则判定发生死锁。
本发明的实施例检测死锁的方法,为任务设置栈,当任务获取资源时,将所获资源的资源标记压入栈,所述资源标记包括资源的获取时间;设置资源标记的存栈时间阈值,根据当前的检测时间与资源的获取时间获取存栈时间,通过比较所述存栈时间与所述存栈时间阈值来检测是否发生任务死锁。与现有技术相比,本发明检测死锁的方法能够及时发现任务死锁,提高了软件的可靠性。
下面给出本发明检测死锁的方法具体实施例二:
以软件中两个并行的任务3和任务4为例,如图5所示,所述检测死锁的方法具体包括:
S501:为任务3和任务4各设置一个栈,任务3获取资源P和资源Q,任务4获取资源U和资源V,资源P、Q、U、V的资源标记分别为p、q、u、v;
其中,与任务3对应的为栈3,与任务4对应的为栈4。所述栈用于存储任务所获资源的资源标记。
其中,获取所述四个资源的时间先后顺序为:资源P、资源Q、资源U和资源V。每个资源与所述资源的资源标记存在一一对应的关系,在本实施例中,所述资源P、资源Q、资源U、资源V的资源标记分别为p、q、u、v。在其它实施例中,资源P、资源Q、资源U、资源V的资源标记可以用其它字母或数字标识。
S502:将资源标记p、q、u、v依次压入栈;
其中,所述资源标记包括资源在内存中的地址和资源的获取时间,不同的资源对应不同的资源标记。按照步骤S501中获取资源的先后顺序,将资源P和资源Q的获取时间分别作为一个标记包依次压入栈3,将资源U和资源V的获取时间分别作为一个标记包依次压入栈4。将资源P的资源标记p、资源Q的标记q,依次压入栈3;将资源U的资源标记u、资源V的资源标记v,依次压入栈4。
S503:设置资源标记p、q、u、v的存栈时间阈值T0;
对于每个资源标记来说,在栈中的停留时间有一个最大临界值。没有发生任务死锁时,资源标记在栈中停留的时间在达到该临界值之前,将会从栈中弹出。将该临界值设为资源标记的存栈时间阈值T0,每个资源标记的存栈时间阈值T0不同。
S504:将当前的检测时间与资源的获取时间相比较,得出两者的时间差值,即为存栈时间T;
S505:将所述存栈时间T与所述时间阈值T0相比较,若存栈时间T大于时间阈值T0,则判定发生死锁。
将所述资源标记的存栈时间T与所述时间阈值T0相比较,若存栈时间T大于所述时间阈值T0,则说明有资源长时间得不到释放,该资源对应的资源标记长时间在栈中存放,发生了任务死锁。
对于上述检测死锁的方法来说,当任务只获取一个资源时,同样能够使用所述方法进行死锁的检测。
因而,利用本发明的实施例检测死锁的方法,能够检测出程序中出现的死锁现象,提高软件的可靠性。
与上述检测死锁的方法相对应,本发明的实施例还提供一种检测死锁的装置,该装置能够检测出程序中出现的死锁现象,提高软件的可靠性。
如图6所示,所述检测死锁的装置包括:栈设置模块601,资源标记压入模块602,时间阈值设置模块603,存栈时间获取模块604及第二比较模块605。
在本实施例中,栈设置模块601用于为任务设置栈;资源标记压入模块602用于当栈设置模块601为任务设置栈后,将所述任务所获的资源的资源标记压入栈,所述资源标记包括资源的获取时间;时间阈值设置模块603用于设置资源标记的存栈时间阈值;存栈时间获取模块604用于根据所述资源标记压入模块602压入栈中的资源标记中的资源的获取时间与当前的检测时间获取存栈时间;第二比较模块605用于将所述存栈时间获取模块604获取的存栈时间与所述时间阈值设置模块603设置的存栈时间阈值相比较。
本发明的实施例检测死锁的装置,栈设置模块601为任务设置栈,当任务获取资源时,资源标记压入模块602将所获资源的资源标记依次压入栈,所述资源标记包括资源的获取时间;时间阈值设置模块603设置资源标记的存栈时间阈值,存栈时间获取模块604根据当前的检测时间与资源的获取时间获取存栈时间,由第二比较模块605通过比较所述存栈时间与所述存栈时间阈值,来检测是否发生任务死锁。与现有技术相比,本发明检测死锁的装置能够及时发现任务死锁,提高了软件的可靠性。
其中,所述存栈时间获取模块604,通过将当前的检测时间与资源的获取时间相比较,得出两者的时间差值,即为所述存栈时间。
如图6所示,所述检测死锁的装置还包括第二判断模块606,用于根据所述第二比较模块605的比较结果,判断是否发生死锁,若所述存栈时间大于所述存栈时间阈值,则判定发生死锁。
因而,利用本发明的实施例检测死锁的装置,能够检测出程序中出现的死锁现象,提高软件的可靠性。
本发明的实施例还提供一种解除死锁的方法,该方法能够解除程序中出现的死锁现象,提高软件的可靠性。
如图7所示,所述方法包括:
S701:停止任务运行;
S702:确定发生死锁的资源标记的位置,作为死锁位置;
S703:将死锁位置以上的资源标记,从栈中弹出并保存;
S704:将发生死锁的资源标记弹出,并释放该发生死锁的资源;
S705:将保存的资源标记压回栈。
本发明的实施例解除死锁的方法,发生任务死锁后,首先停止任务的运行,确定发生死锁的资源标记的位置,作为死锁位置;然后,将死锁位置以上的资源标记从栈中弹出并保存;接着,将发生死锁的资源标记弹出,并释放该发生死锁的资源;最后,将保存的资源标记压回栈。与现有技术相比,本发明解除死锁的方法能够在发生任务死锁后停止任务的运行,将发生死锁的资源一步步释放掉,避免了软件运行状态的进一步恶化,提高了软件的可靠性。
其中,所述解除死锁的方法,可以在检测到死锁之后进行,也可以不用进行死锁的检测,在发生死锁后直接进行。
下面给出本发明检测死锁的方法具体实施例三:
如图8所示,首先检测是否发生任务死锁,若检测到任务死锁,则所述方法具体包括如下步骤:
S801:停止任务运行;
为了让发生死锁的任务恢复运行,就需要解除死锁,也就是将长期被占用的资源释放掉。由于在复杂的并发环境中,多任务的运行有可能导致混乱,另外释放资源需要对栈进行调整,在调整的过程中也不能被打断。因此,需要让所有的任务停止运行,才能进行释放资源和调整栈的工作。
为了达到上述目的,引入一个安全资源。所述安全资源在每个任务中的安全位置放置,该安全位置为任务中某个固定位置,在该安全位置没有其他资源被获取。正常工作时,所述安全资源被各任务获取后就立即释放,不会影响任务的正常工作。
当监控任务检测到死锁时,就申请该安全资源,并等待一段时间,其他任务执行到该安全位置时,申请不到该安全资源,将会停止运行。
S802:确定发生死锁的资源标记的位置,作为死锁位置;
检测到任务发生死锁后,找出栈中发生死锁的资源标记的位置,并将该位置设为死锁位置。
S803:将死锁位置以上的资源标记,从栈中弹出并保存;
所述死锁位置以上的资源标记,不包括发生死锁的资源标记。
S804:将发生死锁的资源标记弹出,并释放该发生死锁的资源;
S805:将保存的资源标记压回栈;
将步骤S803中保存的资源标记按照原顺序重新压回栈中。
S806:恢复任务运行。
监控任务释放掉安全锁,其他任务恢复运行。
若任务恢复运行后仍检测有任务死锁,则重复步骤S801-S806,直至没有任务死锁发生。
其中,对于上述两种检测死锁的方法所检测出的死锁,本发明解除死锁的方法均适用。
因而,利用本发明的实施例解除死锁的方法,能够解除程序中出现的死锁现象,提高软件的可靠性。
与上述解除死锁的方法相对应,本发明的实施例还提供一种解除死锁的装置,该装置能够解除程序中出现的死锁现象,提高软件的可靠性。
如图9所示,所述解除死锁的装置包括任务停止模块901、死锁位置确定模块902、第二资源标记弹出模块903、资源释放模块904及资源标记压回模块905。
在本实施例中,任务停止模块901用于当检测到任务发生死锁时停止任务运行;死锁位置确定模块902用于当所述任务停止模块901停止任务运行后确定发生死锁的资源标记的位置,作为死锁位置;第二资源标记弹出模块903用于将所述死锁位置确定模块902确定的死锁位置以上的资源标记,从栈中弹出并保存;资源释放模块904用于当所述第二资源标记弹出模块903完成弹出和保存操作后,将所述死锁位置确定模块902确定的发生死锁的资源标记弹出,并释放该发生死锁的资源;资源标记压回模块905用于当所述资源释放模块904释放死锁的资源后将保存的资源标记压回栈。
本发明的实施例解除死锁的装置,发生任务死锁后,任务停止模块901停止任务的运行,死锁位置确定模块902确定发生死锁的资源标记的位置,作为死锁位置,第二资源标记弹出模块903将死锁位置以上的资源标记从栈中弹出并保存,资源释放模块904将发生死锁的资源标记弹出,并释放该发生死锁的资源,资源标记压回模块905将保存的资源标记压回栈。与现有技术相比,本发明解除死锁的装置能够在发生任务死锁后停止任务的运行,将发生死锁的资源一步步释放掉,避免了软件运行状态的进一步恶化,提高了软件的可靠性。
如图9所示,所述装置还包括任务恢复模块906,用于当所述资源标记压回模块905将保存的资源标记压回栈后,恢复任务运行。
因而,利用本发明的实施例解除死锁的装置,能够解除程序中出现的死锁现象,提高软件的可靠性。
本发明的实施例还提供一种检测和解除死锁的***,该***能够解除程序中出现的死锁现象,提高软件的可靠性。
如图10所示,所述***包括:
死锁检测装置1001,用于检测任务死锁;
死锁解除装置1002,用于当所述死锁检测装置1001检测到任务死锁后,解除任务死锁。
本发明的实施例检测和解除死锁的***,能够对任务发生的死锁现象进行检测,在检测到任务死锁后,停止任务的运行,将发生死锁的资源一步步释放掉,避免了软件运行状态的进一步恶化,提高了软件的可靠性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述,仅为本发明实施例的具体实施方式,但本发明实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明实施例的保护范围应该以权利要求的保护范围为准。

Claims (19)

1.一种检测死锁的方法,其特征在于,包括:
为任务设置栈;
将所述任务所获得资源的资源标记依次压入栈;
当所述任务释放所述资源时,将压入栈中的所述资源标记从栈中弹出;
比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致,若不一致,则判定发生死锁。
2.根据权利要求1所述的检测死锁的方法,其特征在于,所述资源标记弹出栈的顺序与压入栈的顺序相同或相反。
3.根据权利要求2所述的检测死锁的方法,其特征在于,所述资源标记包括资源的地址和资源的获取时间。
4.根据权利要求3所述的检测死锁的方法,其特征在于,所述比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致的步骤包括:
比较所述任务释放的资源的地址和获取时间与从栈中弹出的资源标记中包括的地址和获取时间是否一致。
5.一种检测死锁的装置,其特征在于,包括:
栈设置模块,用于为任务设置栈;
资源标记压入模块,用于当所述栈设置模块为任务设置栈后,将所述任务所获得资源的资源标记依次压入栈;
第一资源标记弹出模块,用于当所述任务释放所述资源时,将所述资源标记压入模块压入栈中的所述资源标记从栈中弹出;
第一比较模块,用于当所述第一资源标记弹出模块弹出资源标记时,比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致;
第一判断模块,用于根据所述第一比较模块的比较结果,判断是否发生死锁,若所述任务释放的资源的资源标记与所述从栈中弹出的资源标记不一致,则判定发生死锁。
6.根据权利要求5所述的检测死锁的装置,其特征在于,所述资源标记弹出栈的顺序与压入栈的顺序相同或相反。
7.根据权利要求6所述的检测死锁的装置,其特征在于,所述资源标记包括资源的地址和资源的获取时间。
8.根据权利要求7所述的检测死锁的装置,其特征在于,所述第一比较模块,通过比较所述任务释放的资源的地址和获取时间与从栈中弹出的资源标记中包括的地址和获取时间是否一致,来比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致。
9.一种检测死锁的方法,其特征在于,包括:
为任务设置栈;
将所述任务所获得资源的资源标记压入栈,所述资源标记包括资源的获取时间;
设置所述资源标记的存栈时间阈值;
根据当前的检测时间与资源的获取时间获取存栈时间;
将所述存栈时间与所述存栈时间阈值相比较,若存栈时间大于存栈时间阈值,则判定发生死锁。
10.根据权利要求9所述的检测死锁的方法,其特征在于,根据当前的检测时间与资源的获取时间获取存栈时间的步骤包括:
将当前的检测时间与资源的获取时间相比较,得出两者的时间差值,即为所述存栈时间。
11.一种检测死锁的装置,其特征在于,包括:
栈设置模块,用于为任务设置栈;
资源标记压入模块,用于当栈设置模块为任务设置栈后,将所述任务所获得资源的资源标记压入栈,所述资源标记包括资源的获取时间;
时间阈值设置模块,用于设置资源标记的存栈时间阈值;
存栈时间获取模块,用于根据所述资源标记压入模块压入栈中的资源标记中的资源的获取时间与当前的检测时间获取存栈时间;
第二比较模块,用于将所述存栈时间获取模块获取的存栈时间与所述时间阈值设置模块设置的存栈时间阈值相比较;
第二判断模块,用于根据所述第二比较模块的比较结果,判断是否发生死锁,若所述存栈时间大于所述存栈时间阈值,则判定发生死锁。
12.根据权利要求11所述的检测死锁的装置,其特征在于,所述存栈时间获取模块,通过将当前的检测时间与资源的获取时间相比较,得出两者的时间差值,即为所述存栈时间。
13.一种解除死锁的方法,其特征在于,为任务设置栈,将所述任务获得资源的资源标记依次压入栈,当检测到死锁时,所述方法包括:
停止任务运行;
确定发生死锁的资源标记的位置,作为死锁位置;
将死锁位置以上的资源标记,从栈中弹出并保存;
将发生死锁的资源标记弹出,并释放该发生死锁的资源;
将保存的资源标记压回栈。
14.根据权利要求13所述的解除死锁的方法,其特征在于,在所述将保存的资源标记压回栈的步骤之后,还包括:
恢复任务运行。
15.一种解除死锁的装置,其特征在于,包括:
任务停止模块,用于当检测到任务发生死锁时停止任务运行,其中,在检测到任务发生死锁之前为任务设置栈,将所述任务获得资源的资源标记依次压入栈;
死锁位置确定模块,用于当所述任务停止模块停止任务运行后确定发生死锁的资源标记的位置,作为死锁位置;
第二资源标记弹出模块,用于将所述死锁位置确定模块确定的死锁位置以上的资源标记,从栈中弹出并保存;
资源释放模块,用于当所述第二资源标记弹出模块完成弹出和保存操作后,将所述死锁位置确定模块确定的发生死锁的资源标记弹出,并释放该发生死锁的资源;
资源标记压回模块,用于当所述资源释放模块释放死锁的资源后将保存的资源标记压回栈。
16.根据权利要求15所述的解除死锁的装置,其特征在于,还包括:
任务恢复模块,用于当所述资源标记压回模块将保存的资源标记压回栈后,恢复任务运行。
17.一种检测和解除死锁的***,其特征在于,包括:
死锁检测装置,用于检测任务死锁;
死锁解除装置,用于当所述死锁检测装置检测到任务死锁后,解除任务死锁;
其中,所述死锁检测装置包括:
栈设置模块,用于为任务设置栈;
资源标记压入模块,用于当所述栈设置模块为任务设置栈后,将所述任务所获得资源的资源标记依次压入栈;
第一资源标记弹出模块,用于当所述任务释放所述资源时,将所述资源标记压入模块压入栈中的所述资源标记从栈中弹出;
第一比较模块,用于当所述第一资源标记弹出模块弹出资源标记时,比较所述任务释放的资源的资源标记与所述从栈中弹出的资源标记是否一致;
第一判断模块,用于根据所述第一比较模块的比较结果,判断是否发生死锁,若所述任务释放的资源的资源标记与所述从栈中弹出的资源标记不一致,则判定发生死锁。
18.根据权利要求17所述的检测和解除死锁的***,其特征在于,所述资源标记包括资源的地址和资源的获取时间。
19.根据权利要求18所述的检测和解除死锁的***,其特征在于,所述死锁检测装置还包括:
时间阈值设置模块,用于设置资源标记的存栈时间阈值;
存栈时间获取模块,用于根据所述资源标记压入模块压入栈中的资源标记中的资源的获取时间与当前的检测时间获取存栈时间;
第二比较模块,用于将所述存栈时间获取模块获取的存栈时间与所述时间阈值设置模块设置的存栈时间阈值相比较;
第二判断模块,用于根据所述第二比较模块的比较结果,判断是否发生死锁,若所述存栈时间大于所述存栈时间阈值,则判定发生死锁。
CN2008101115384A 2008-06-05 2008-06-05 检测和解除死锁的方法、装置和*** Expired - Fee Related CN101295266B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008101115384A CN101295266B (zh) 2008-06-05 2008-06-05 检测和解除死锁的方法、装置和***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008101115384A CN101295266B (zh) 2008-06-05 2008-06-05 检测和解除死锁的方法、装置和***

Publications (2)

Publication Number Publication Date
CN101295266A CN101295266A (zh) 2008-10-29
CN101295266B true CN101295266B (zh) 2010-06-16

Family

ID=40065563

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101115384A Expired - Fee Related CN101295266B (zh) 2008-06-05 2008-06-05 检测和解除死锁的方法、装置和***

Country Status (1)

Country Link
CN (1) CN101295266B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101576830B (zh) * 2009-06-04 2011-11-30 中兴通讯股份有限公司 数据库事务锁机制的死锁检测方法及装置
CN103279417A (zh) * 2013-06-05 2013-09-04 福州瑞芯微电子有限公司 检测锁异常的方法与装置
CN104239147B (zh) * 2014-10-20 2018-03-09 浪潮(北京)电子信息产业有限公司 一种处理死锁循环方法及***
CN105700851B (zh) * 2016-01-08 2018-06-01 大唐微电子技术有限公司 一种实现压栈和弹栈的方法和装置
CN107305507B (zh) * 2016-04-25 2020-05-01 北京京东尚科信息技术有限公司 死锁控制方法和装置
CN112256442A (zh) * 2019-07-22 2021-01-22 中兴通讯股份有限公司 一种数据库死锁检测方法及装置
CN110427272B (zh) * 2019-07-26 2022-07-01 新华三技术有限公司成都分公司 接口函数定位方法、装置及网络设备
CN112994990B (zh) * 2021-05-20 2021-07-30 蚂蚁金服(杭州)网络技术有限公司 一种环路检测方法、装置、电子设备与存储介质
CN113703987B (zh) * 2021-09-14 2024-02-23 中国银行股份有限公司 Java任务死锁检测方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040025164A1 (en) * 2002-07-30 2004-02-05 Intel Corporation Detecting deadlocks in multithreaded programs
CN1811719A (zh) * 2006-02-22 2006-08-02 福建师范大学 一种单线程微处理器的死锁检测与干预方法
CN1987796A (zh) * 2005-12-22 2007-06-27 国际商业机器公司 检测多线程程序中的死锁的方法和装置
CN101046756A (zh) * 2006-03-31 2007-10-03 国际商业机器公司 用于解决计算资源死锁的设备、***以及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040025164A1 (en) * 2002-07-30 2004-02-05 Intel Corporation Detecting deadlocks in multithreaded programs
CN1987796A (zh) * 2005-12-22 2007-06-27 国际商业机器公司 检测多线程程序中的死锁的方法和装置
CN1811719A (zh) * 2006-02-22 2006-08-02 福建师范大学 一种单线程微处理器的死锁检测与干预方法
CN101046756A (zh) * 2006-03-31 2007-10-03 国际商业机器公司 用于解决计算资源死锁的设备、***以及方法

Also Published As

Publication number Publication date
CN101295266A (zh) 2008-10-29

Similar Documents

Publication Publication Date Title
CN101295266B (zh) 检测和解除死锁的方法、装置和***
CN103259688B (zh) 一种分布式存储***的故障诊断方法与装置
CN101414272B (zh) 内存泄漏的检测方法和装置
US10423783B2 (en) Methods and apparatus to recover a processor state during a system failure or security event
CN104063477B (zh) 嵌入式***启动异常的处理方法及装置
CN104077197B (zh) ***恢复方法、装置、固态硬盘和电子设备
CN103839007B (zh) 一种检测异常线程的方法及***
CN103019707B (zh) 调用栈的解析处理方法及装置
CN107239238B (zh) 一种基于分布式锁的存储的io操作方法及装置
CN108874683A (zh) 固态存储设备的垃圾回收的方法以及计算机设备
JP2008035269A5 (zh)
CN109144754A (zh) 一种可靠性测试方法及装置
IL273129B1 (en) Enabling irreversible processing of a transaction after an update instruction masks anomalies
CN102915260B (zh) 固态硬盘容错的方法及其固态硬盘
US8751873B2 (en) Proactively removing channel paths in error from a variable scope of I/O devices
CN105389161B (zh) 事务内存的冲突检测方法、事务内存***及微处理器
CN109061585A (zh) 一种雷达数据存储方法和装置
EP3859528A3 (en) Method and apparatus for handling memory failure, electronic device and storage medium
CN105786680B (zh) 内核崩溃后内存预分析方法及其***
CN110297097B (zh) 样本架复位方法、装置和设备
JP3222083B2 (ja) 共有メモリ制御装置
EP2884467A1 (en) Image identification system and image storage control method
US20070260915A1 (en) Identifying one or more storage devices causing a failure condition during discovery of storage devices
CN106599236A (zh) 一种文件***的元数据存储方法和装置
CN108614779A (zh) 用于NANDflash存储设备的数据处理方法、NANDflash存储设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: CHENGDU CITY HUAWEI SAIMENTEKE SCIENCE CO., LTD.

Free format text: FORMER OWNER: HUAWEI TECHNOLOGY CO., LTD.

Effective date: 20090424

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20090424

Address after: Qingshui River District, Chengdu high tech Zone, Sichuan Province, China: 611731

Applicant after: Chengdu Huawei Symantec Technologies Co., Ltd.

Address before: Headquarters office building, Bantian HUAWEI base, Longgang District, Guangdong, Shenzhen Province, China: 518129

Applicant before: Huawei Technologies Co., Ltd.

C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee

Owner name: HUAWEI DIGITAL TECHNOLOGY (CHENGDU) CO., LTD.

Free format text: FORMER NAME: CHENGDU HUAWEI SYMANTEC TECHNOLOGIES CO., LTD.

CP01 Change in the name or title of a patent holder

Address after: 611731 Chengdu high tech Zone, Sichuan, West Park, Qingshui River

Patentee after: Huawei Symantec Technologies Co., Ltd.

Address before: 611731 Chengdu high tech Zone, Sichuan, West Park, Qingshui River

Patentee before: Chengdu Huawei Symantec Technologies Co., Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100616

Termination date: 20180605