CN109445951B - 一种信息处理方法及装置 - Google Patents
一种信息处理方法及装置 Download PDFInfo
- Publication number
- CN109445951B CN109445951B CN201811287412.2A CN201811287412A CN109445951B CN 109445951 B CN109445951 B CN 109445951B CN 201811287412 A CN201811287412 A CN 201811287412A CN 109445951 B CN109445951 B CN 109445951B
- Authority
- CN
- China
- Prior art keywords
- thread
- lock
- locking
- record
- deadlock
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
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
本申请实施例提供了一种信息处理方法及装置,包括:当对第一线程执行加锁操作时,获取针对第一线程的第一锁的锁标识;将第一锁的锁标识更新至第一线程的当前加锁记录中;当前加锁记录中包括的锁标识按照对第一线程执行加锁操作的时间顺序排序;在第二线程的历史加锁记录中,查找与第一锁关联且记录在当前加锁记录中的死锁历史记录;第二线程的历史加锁记录中包括的锁标识按照对第二线程执行加锁操作的时间顺序排序;若查找到,则显示第二线程与死锁历史记录的对应关系。应用本申请实施例提供的技术方案,能够降低死锁问题对设备产生的负面影响。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种信息处理方法及装置。
背景技术
死锁,指多个进程(或线程)因为长久等待已被其他进程(或线程)占用的资源而陷入的一种状态。若一个进程等待的资源一直得不到释放,死锁就会会一直持续下去,死锁一旦发生,程序本身是解决不了的,只能依靠外部力量使得程序恢复运行,例如重启等。
为解决死锁的问题,目前提供了一种检测方法,该方法中,在执行任务前开启计时器,在当前任务执行过程中,计时器进行累计加时。若计时器累计时长超过设定的最大运行时长,则当前任务发生了死锁现象,结束当前任务。
该检测方法,在死锁发生后才能检测到,这时死锁问题已对设备产生了负面的影响。
发明内容
本申请实施例的目的在于提供一种信息处理方法及装置,以降低死锁问题对设备产生的负面影响。具体技术方案如下:
第一方面,本申请实施例提供了一种信息处理方法,所述方法包括:
当对第一线程执行加锁操作时,获取针对所述第一线程的第一锁的锁标识;
将所述第一锁的锁标识更新至所述第一线程的当前加锁记录中;所述当前加锁记录中包括的锁标识按照对所述第一线程执行加锁操作的时间顺序排序;
在第二线程的历史加锁记录中,查找与所述第一锁关联且记录在所述当前加锁记录中的死锁历史记录;所述第二线程的历史加锁记录中包括的锁标识按照对所述第二线程执行加锁操作的时间顺序排序;
若查找到,则显示所述第二线程与所述死锁历史记录的对应关系。
结合第一方面,在第一种可能的实现方式中,所述当对第一线程执行加锁操作时,获取针对所述第一线程的第一锁的锁标识的步骤,包括:
当通过API(Application Programming Interface,应用程序编程接口)对第一线程执行加锁操作时,运行所述API上加载的调试代码,获取针对所述第一线程的第一锁的锁标识。
结合第一方面,在第二种可能的实现方式中,所述方法还包括:
若未查找到,则调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作;
将所述第一锁的锁标识更新至所述第一线程的历史加锁记录中。
结合第一方面,在第三种可能的实现方式中,所述方法还包括:
在显示所述第二线程与所述死锁历史记录的对应关系之后,调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作;将所述第一锁的锁标识更新至所述第一线程的历史加锁记录中;或
在显示所述第二线程与所述死锁历史记录的对应关系之后,显示提示信息;若接收到用户根据所述提示信息输入的操作指令,则根据所述操作指令,调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作;将所述第一锁的锁标识更新至所述第一线程的历史加锁记录中。
结合第一方面的第二种或第三种可能的实现方式,在第四种可能的实现方式中,所述方法还包括:
在调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作之后,当对所述第一线程执行解锁操作时,获取针对所述第一线程的第一锁的锁标识;
从所述第一线程的当前加锁记录中删除所述第一锁的锁标识;
调用解锁函数,利用所述第一锁对所述第一线程执行解锁操作。
第二方面,本申请实施例提供了一种信息处理装置,所述装置包括:
获取单元,用于当对第一线程执行加锁操作时,获取针对所述第一线程的第一锁的锁标识;
第一更新单元,用于将所述第一锁的锁标识更新至所述第一线程的当前加锁记录中;所述当前加锁记录中包括的锁标识按照对所述第一线程执行加锁操作的时间顺序排序;
查找单元,用于在第二线程的历史加锁记录中,查找与所述第一锁关联且记录在所述当前加锁记录中的死锁历史记录;所述第二线程的历史加锁记录中包括的锁标识按照对所述第二线程执行加锁操作的时间顺序排序;
显示单元,用于在查找到所述死锁历史记录的情况下,显示所述第二线程与所述死锁历史记录的对应关系。
结合第二方面,在第一种可能的实现方式中,所述获取单元具体用于:
当通过API对第一线程执行加锁操作时,运行所述API上加载的调试代码,获取针对所述第一线程的第一锁的锁标识。
结合第二方面,在第二种可能的实现方式中,所述装置还包括:
加锁单元,用于在未查找到所述死锁历史记录的情况下,则调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作;
第二更新单元,用于将所述第一锁的锁标识更新至所述第一线程的历史加锁记录中。
结合第二方面,在第三种可能的实现方式中,所述装置还包括:
加锁单元,用于在显示所述第二线程与所述死锁历史记录的对应关系之后,调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作;或,用于在显示所述第二线程与所述死锁历史记录的对应关系之后,显示提示信息;若接收到用户根据所述提示信息输入的操作指令,则根据所述操作指令,调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作;
第二更新单元,用于将所述第一锁的锁标识更新至所述第一线程的历史加锁记录中。
结合第二方面的第二种或第三种可能的实现方式,在第四种可能的实现方式中,所述装置还包括删除单元和解锁单元;
所述获取单元,还用于在调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作之后,当对所述第一线程执行解锁操作时,获取针对所述第一线程的第一锁的锁标识;
所述删除单元,用于从所述第一线程的当前加锁记录中删除所述第一锁的锁标识;
所述解锁单元,用于调用解锁函数,利用所述第一锁对所述第一线程执行解锁操作。
第三方面,本申请实施例提供了一种电子设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器被所述机器可执行指令促使实现上述信息处理方法的任一步骤。
第四方面,本申请实施例提供了一种机器可读存储介质,存储有机器可执行指令,在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现上述信息处理方法的任一步骤。
本申请实施例提供的信息处理方法及装置,当对第一线程执行加锁操作时,获取针对第一线程的第一锁的锁标识,将第一锁的锁标识更新至第一线程的当前加锁记录中。当在第二线程的历史加锁记录中,查找到与第一锁关联且记录在当前加锁记录中的死锁历史记录时,确定存在死锁隐患,显示第二线程与死锁历史记录的对应关系。可见,本申请实施例中,在死锁发生前,若确定存在死锁隐患,则显示了第二线程与死锁历史记录的对应关系,可有效的帮助开发人员快速定位真正问题,进而降低死锁问题对设备产生的负面影响。当然,实施本申请的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的信息处理方法的第一种流程示意图;
图2为本申请实施例提供的线程加解锁的一种示意图;
图3为本申请实施例提供的信息处理方法的第二种流程示意图;
图4a-4b为本申请实施例提供的线程加解锁的另一种示意图;
图5为本申请实施例提供的信息处理装置的一种结构示意图;
图6为本申请实施例提供的电子设备的一种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为便于理解,下面对本申请实施例中出现的词语进行解释说明。
REAL_LOCK():系统提供的标准加锁函数。
REAL_UNLOCK():系统提供的标准解锁函数。
L():代表接管REAL_LOCK()后的某种加锁函数。例如,L(A)代表利用锁A进行加锁。
U():代表接管REAL_UNLOCK()后的某种解锁函数。例如U(A)代表利用锁A进行解锁。
死锁,指多个进程(或线程)因为长久等待已被其他进程(或线程)占用的资源而陷入的一种状态。若一个进程等待的资源一直得不到释放,死锁就会会一直持续下去,死锁一旦发生,程序本身是解决不了的,只能依靠外部力量使得程序恢复运行,例如重启等。
以ABBA死锁为例。假设,有两个线程,分别为线程01和线程02。线程01持有锁A后,再去获取锁B,而此时恰好线程02持有锁B后,再去获取锁A。此时,线程01会长久等待获取锁B,线程02会长久等待获取锁A。那么此时就会处于死锁的状态。
为解决死锁的问题,目前提供了一种检测方法。该方法中,在执行任务前开启计时器,在当前任务执行过程中,计时器进行累计加时。若计时器累计时长超过设定的最大运行时长,则当前任务发生了死锁现象,结束当前任务。该检测方法,在死锁发生后才能检测到,这时死锁问题已对设备产生了负面的影响。
为降低死锁问题对设备产生的负面影响,本申请实施例提供了一种信息处理方法。该方法中,当对第一线程执行加锁操作时,获取针对第一线程的第一锁的锁标识;将第一锁的锁标识更新至第一线程的当前加锁记录中;当前加锁记录中包括的锁标识按照对第一线程执行加锁操作的时间顺序排序;在第二线程的历史加锁记录中,查找与第一锁关联且记录在当前加锁记录中的死锁历史记录;第二线程的历史加锁记录中包括的锁标识按照对第二线程执行加锁操作的时间顺序排序;若查找到,则显示第二线程与死锁历史记录的对应关系。
可见,本申请实施例中,在死锁发生前,若确定存在死锁隐患,则显示了第二线程与死锁历史记录的对应关系,可有效的帮助开发人员快速定位真正问题,进而降低死锁问题对设备产生的负面影响。
下面通过具体实施例,对本申请进行说明。
参考图1,图1为本申请实施例提供的信息处理方法的第一种流程示意图。该信息处理方法包括如下步骤。
步骤101,当对第一线程执行加锁操作时,获取针对第一线程的第一锁的锁标识。
本申请实施例中,第一线程可以为设备中的任一线程,此处仅以第一线程为例进行说明,并不起限定作用。第一锁可以为任一锁,此处仅以第一锁为例进行说明,并不起限定作用。锁标识包括锁地址和/或锁名。其中,锁地址为存储锁代码的地址。每一个锁的锁地址和锁名均是唯一的。
在本申请的一个实施例中,为便于获取到线程所加锁的锁标识,可以在各个API上加载的调试代码。其中,API与各类锁相关,开发人员可通过API对各线程执行加锁操作。API上加载的调试代码可以用于获取通过API为线程所加锁的锁标识。具体的,当通过一API对第一线程执行加锁操作时,可运行该API上加载的调试代码,获取针对第一线程的第一锁的锁标识。
步骤102,将第一锁的锁标识更新至第一线程的当前加锁记录中。其中,当前加锁记录中包括的锁的锁标识按照对第一线程执行加锁操作的时间顺序排序。
一个实施例中,设备中存储有线程的当前加锁记录和历史加锁记录。其中,线程的当前加锁记录为在利用锁对线程进行加锁时更新,即对线程执行加锁操作时更新,线程的历史加锁记录为在利用锁对线程执行加锁操作后更新。当前加锁记录和历史加锁记录中包括的锁标识均可以按照对第一线程执行加锁操作的时间顺序排序。
例如,如图2所示。当利用锁A对线程11执行加锁操作时,线程11的当前加锁记录更新为A,线程11的历史加锁记录为空。当利用锁A对线程11执行加锁操作后,线程11的历史加锁记录更新为A,线程11的当前加锁记录为A。
之后,当利用锁B对线程11执行加锁操作时,线程11的当前加锁记录更新为A→B,线程11的历史加锁记录为A。当利用锁B对线程11执行加锁操作后,线程11的历史加锁记录更新为A→B,线程11的当前加锁记录为A→B。
步骤103,在第二线程的历史加锁记录中,查找与第一锁关联且记录在当前加锁记录中的死锁历史记录。第二线程的历史加锁记录中包括的锁标识按照对第二线程执行加锁操作的时间顺序排序。若查找到死锁历史记录,则执行步骤104。
本申请实施例中,第二线程可以为设备中的任一线程。历史加锁记录中记录在当前加锁记录中的死锁历史记录为,历史加锁记录中与当前加锁记录中锁标识的时间顺序相反的历史加锁记录。第一锁关联的死锁历史记录为,包括第一锁的锁标识的历史加锁记录。
例如,线程11的当前加锁记录为A→B。此时,第一锁为锁B。若设备在线程12的历史加锁记录中查找到存在B→A或B→…→A的加锁记录,则可以确定在线程12的历史加锁记录中,查找到与锁B关联且记录在线程11的当前加锁记录中的死锁历史记录。若设备在线程12的历史加锁记录中未查找到B→A或B→…→A的加锁记录,则可以确定在线程12的历史加锁记录中,未查找到与锁B关联且记录在线程11的当前加锁记录中的死锁历史记录。
步骤104,显示第二线程与死锁历史记录的对应关系。
若在第二线程的历史加锁记录中,查找到与第一锁关联、且与当前加锁记录对应的死锁历史记录,则确定存在死锁隐患,显示第二线程与死锁历史记录的对应关系,即打印死锁,以及死锁的调用栈信息。一个实施例中,设备还可以显示第一线程与死锁历史记录的对应关系。例如,线程11的当前加锁记录为A→B。此时,第一锁为锁B。若设备在线程12的历史加锁记录中查找到存在B→A的加锁记录,则可以确定在线程12的历史加锁记录中,查找到与锁B关联且记录在线程11的当前加锁记录中的死锁历史记录。设备显示线程11与A→B的加锁记录的对应关系,以及线程12与B→A的加锁记录的对应关系。
这样,可有效的帮助开发人员快速定位真正问题,及时解决死锁问题,降低了死锁问题对设备产生的负面影响。
另外,本申请实施例中,可以在软件开发阶段发现死锁隐患问题,而不是等到最后真正发现死锁时才发现,提高了用户体验。
本申请实施例提供的信息处理方法中,不需要复现精确的死锁发生时刻,只需要正常遍历加锁和解锁的业务流程,就可以通过分析识别出可能死锁的上下文和调用栈。这可实现即使普通的系统测试也能检测死锁隐患,从而提高了系统测试发现深度的有效性。
在本申请的一个实施例中,参考图3所示的信息处理方法的第二种流程示意图。该方法可包括如下步骤。
步骤301,当对第一线程执行加锁操作时,获取针对第一线程的第一锁的锁标识。
步骤302,将第一锁的锁标识更新至第一线程的当前加锁记录中。其中,当前加锁记录中包括的锁标识按照对第一线程执行加锁操作的时间顺序排序。
步骤303,在第二线程的历史加锁记录中,查找与第一锁关联且记录在当前加锁记录中的死锁历史记录。第二线程的历史加锁记录中包括的锁标识按照对第二线程执行加锁操作的时间顺序排序。若查找到死锁历史记录,则执行步骤304。
步骤304,显示第二线程与死锁历史记录的对应关系。
步骤301-304与步骤101-104相同。
步骤305,调用加锁函数,利用第一锁对第一线程执行加锁操作。
本申请实施例中,可调用REAL_LOCK(),利用第一锁对第一线程执行加锁操作。具体的,调用REAL_LOCK(),从第一锁的锁地址处,提取第一锁的锁名对应的代码,利用提取的代码对第一线程执行加锁操作。
一个实施例中,设备在显示第二线程与死锁历史记录的对应关系之后,显示提示信息。用户根据提示信息,若确定不会存在死锁问题,则输入操作指令。设备根据用户输入的操作指令,调用加锁函数,利用第一锁对第一线程执行加锁操作。以降低死锁的问题出现的几率。
另一个实施例中,设备在显示第二线程与死锁历史记录的对应关系之后,若预设时长后未接收到用户输入的操作指令,则调用加锁函数,利用第一锁对第一线程执行加锁操作。这可降低对正常业务的影响。
再一个实施例中,设备在显示第二线程与死锁历史记录的对应关系之后,用户根据提示信息,若确定存在死锁问题,则输入关闭操作指令。设备根据用户输入的关闭操作指令,则停止调用加锁函数,利用第一锁对第一线程执行加锁操作。以降低死锁问题的影响,便于用户解决设备的死锁问题。
步骤306,将第一锁的锁标识更新至第一线程的历史加锁记录中。
本申请实施例中,即使确定存在死锁隐患,但仍然调用加锁函数,对第一线程执行加锁操作,降低了对正常业务的影响。另外,将第一锁的锁标识更新至第一线程的历史加锁记录中,以便于根据历史加锁记录定位死锁隐患。
在本申请的一个实施例中,设备中存在多个第二线程,若第二线程的历史加锁记录中均不存在与当前加锁记录对应的死锁历史记录,则确定不存在死锁隐患,调用加锁函数,利用第一锁对第一线程执行加锁操作。在利用第一锁对第一线程执行加锁操作之后,将第一锁的锁标识更新至第一线程的历史加锁记录中。
例如,如图4a和4b所示,设备中存在线程21和线程22两个线程。当分别利用锁A和锁B对线程21执行加锁操作之后,线程21的历史加锁记录更新为A→B。
当利用锁B对线程22执行加锁操作时,线程22的当前加锁记录更新为B。线程22的历史加锁记录为空。此时,线程22的当前加锁记录B与线程21的历史加锁记录A→B不构成死锁。调用REAL_LOCK(),利用锁B对线程22执行加锁操作。利用锁B对线程22执行加锁操作之后,线程22的历史加锁记录更新为B。
之后,当利用锁A对线程22执行加锁操作时,线程22的当前加锁记录更新为B→A。线程22的历史加锁记录为B。此时,线程22的当前加锁记录B→A与线程21的历史加锁记录A→B构成死锁,死锁历史记录为A→B,显示线程21与死锁历史记录A→B、B→A的对应关系。另外,调用REAL_LOCK(),利用锁A对线程22执行加锁操作。在利用锁A对线程22执行加锁操作之后,线程22的历史加锁记录更新为B→A。
在本申请的一个实施例中,在调用加锁函数,利用第一锁对第一线程执行加锁操作之后,当对第一线程执行解锁操作时,获取针对第一线程的第一锁的锁标识,从第一线程的当前加锁记录中删除第一锁的锁标识;调用解锁函数,利用第一锁对第一线程执行解锁操作。
一个示例中,可以在各个API上加载的调试代码,API与各类锁相关,开发人员可通过API对各线程执行加锁操作。API上加载的调试代码可以用于获取通过API为线程所解的锁。具体的,当通过一API对第一线程执行解锁操作时,可运行该API上加载的调试代码,获取针对第一线程的第一锁的锁标识。
例如,如图2所示,当利用锁B对线程11执行加锁操作后,线程11的历史加锁记录更新为A→B。此时,线程11的当前加锁记录为A→B。
之后,当利用锁B对线程11执行解锁操作时,获取针对线程11的锁B的锁标识,从线程11的当前加锁记录中删除锁B的锁标识,线程11的当前加锁记录更新为A。调用REAL_UNLOCK(),利用锁B对线程11执行解锁操作。
再之后,当利用锁A对线程11执行解锁操作时,获取针对线程11的锁A的锁标识,从线程11的当前加锁记录中删除锁的锁标识A,线程11的当前加锁记录更新为空。调用REAL_UNLOCK(),利用锁A对线程11执行解锁操作。
本申请实施例中,对线程执行加解锁操作时更新线程的当前加锁记录,但不改变线程的历史加锁记录,以便于基于线程的历史加锁记录,准确的确定死锁隐患。
与上述信息处理方法实施例对应,本申请实施例还提供了一种信息处理装置。参考图5,图5为本申请实施例提供了信息处理装置的一种结构示意图。该装置包括:获取单元501、第一更新单元502、查找单元503和显示单元504。
获取单元501,用于当对第一线程执行加锁操作时,获取针对第一线程的第一锁的锁标识;
第一更新单元502,用于将第一锁的锁标识更新至第一线程的当前加锁记录中;当前加锁记录中包括的锁标识按照对第一线程执行加锁操作的时间顺序排序;
查找单元503,用于在第二线程的历史加锁记录中,查找与第一锁关联且记录在当前加锁记录中的死锁历史记录;第二线程的历史加锁记录中包括的锁标识按照对第二线程执行加锁操作的时间顺序排序;
显示单元504,用于在查找到死锁历史记录的情况下,显示第二线程与死锁历史记录的对应关系。
一个实施例中,获取单元501具体可以用于:
当通过API对第一线程执行加锁操作时,运行API上加载的调试代码,获取针对第一线程的第一锁的锁标识。
一个实施例中,上述信息处理装置还可以包括:
加锁单元,用于在未查找到死锁历史记录的情况下,则调用加锁函数,利用第一锁对第一线程执行加锁操作;
第二更新单元,用于将第一锁的锁标识更新至第一线程的历史加锁记录中。
一个实施例中,上述信息处理装置还可以包括:
加锁单元,用于在显示第二线程与死锁历史记录的对应关系之后,调用加锁函数,利用第一锁对第一线程执行加锁操作;或,用于在显示第二线程与死锁历史记录的对应关系之后,显示提示信息;若接收到用户根据提示信息输入的操作指令,则根据操作指令,调用加锁函数,利用第一锁对第一线程执行加锁操作;
第二更新单元,用于将第一锁的锁标识更新至第一线程的历史加锁记录中。
一个实施例中,上述信息处理装置还可以包括:删除单元和解锁单元;
获取单元501,还可以用于在调用加锁函数,利用第一锁对第一线程执行加锁操作之后,当对第一线程执行解锁操作时,获取针对第一线程的第一锁的锁标识;
删除单元,用于从第一线程的当前加锁记录中删除第一锁的锁标识;
解锁单元,用于调用解锁函数,利用第一锁对第一线程执行解锁操作。
本申请实施例提供的技术方案中,在死锁发生前,若确定存在死锁隐患,则显示了第二线程与死锁历史记录的对应关系,可有效的帮助开发人员快速定位真正问题,进而降低死锁问题对设备产生的负面影响。
与上述信息处理方法实施例对应,本申请实施例还提供了一种电子设备,如图6所示,包括处理器601和机器可读存储介质602,机器可读存储介质602存储有能够被处理器601执行的机器可执行指令。处理器601被机器可执行指令促使实现上述信息处理方法的任一步骤。具体的,该信息处理方法包括:
当对第一线程执行加锁操作时,获取针对第一线程的第一锁的锁标识;
将第一锁的锁标识更新至第一线程的当前加锁记录中;当前加锁记录中包括的锁标识按照对第一线程执行加锁操作的时间顺序排序;
在第二线程的历史加锁记录中,查找与第一锁关联且记录在当前加锁记录中的死锁历史记录;第二线程的历史加锁记录中包括的锁标识按照对第二线程执行加锁操作的时间顺序排序;
若查找到,则显示第二线程与死锁历史记录的对应关系。
本申请实施例提供的技术方案中,在死锁发生前,若确定存在死锁隐患,则显示了第二线程与死锁历史记录的对应关系,可有效的帮助开发人员快速定位真正问题,进而降低死锁问题对设备产生的负面影响。
一个实施例中,如图6所示,电子设备还可以包括:通信接口603和通信总线604;其中,处理器601、机器可读存储介质602、通信接口603通过通信总线604完成相互间的通信,通信接口603用于上述电子设备与其他设备之间的通信。
上述通信总线604可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(Extended Industry Standard Architecture,扩展工业标准结构)总线等。该通信总线604可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
上述机器可读存储介质602可以包括RAM(Random Access Memory,随机存取存储器),也可以包括NVM(Non-Volatile Memory,非易失性存储器),例如至少一个磁盘存储器。另外,机器可读存储介质602还可以是至少一个位于远离前述处理器的存储装置。
上述处理器601可以是通用处理器,包括CPU(Central Processing Unit,中央处理器)、NP(Network Processor,网络处理器)等;还可以是DSP(Digital SignalProcessing,数字信号处理器)、ASIC(Application Specific Integrated Circuit,专用集成电路)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)或其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
与上述信息处理方法实施例对应,本申请实施例还提供了一种机器可读存储介质,存储有机器可执行指令,在被处理器调用和执行时,机器可执行指令促使处理器:实现上述信息处理方法的任一步骤。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于信息处理装置、电子设备、机器可读存储介质实施例而言,由于其基本相似于信息处理方法实施例,所以描述的比较简单,相关之处参见信息处理方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。
Claims (12)
1.一种信息处理方法,其特征在于,所述方法包括:
当对第一线程执行加锁操作时,获取针对所述第一线程的第一锁的锁标识;
将所述第一锁的锁标识更新至所述第一线程的当前加锁记录中;所述第一线程的当前加锁记录中包括的锁标识按照对所述第一线程执行加锁操作的时间顺序排序,所述第一线程的当前加锁记录中记录了当前所述第一线程所加的锁;
在第二线程的历史加锁记录中,查找与所述第一锁关联且记录在所述第一线程的当前加锁记录中的死锁历史记录;所述第二线程的历史加锁记录中包括的锁标识按照对所述第二线程执行加锁操作的时间顺序排序,所述第二线程的历史加锁记录中记录了所述第二线程所加过的所有锁,历史加锁记录中记录在当前加锁记录中的死锁历史记录为:历史加锁记录中与当前加锁记录中锁标识的时间顺序相反的历史加锁记录,第一锁关联的死锁历史记录为:包括第一锁的锁标识的历史加锁记录;
若查找到,则显示所述第二线程与所述死锁历史记录的对应关系;
在显示所述第二线程与所述死锁历史记录的对应关系之后,利用所述第一锁对所述第一线程执行加锁操作,并将所述第一锁的锁标识更新至所述第一线程的历史加锁记录中。
2.根据权利要求1所述的方法,其特征在于,所述当对第一线程执行加锁操作时,获取针对所述第一线程的第一锁的锁标识的步骤,包括:
当通过应用程序编程接口API对第一线程执行加锁操作时,运行所述API上加载的调试代码,获取针对所述第一线程的第一锁的锁标识。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若未查找到,则调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作;
将所述第一锁的锁标识更新至所述第一线程的历史加锁记录中。
4.根据权利要求1所述的方法,其特征在于,所述利用所述第一锁对所述第一线程执行加锁操作,并将所述第一锁的锁标识更新至所述第一线程的历史加锁记录的步骤,包括:
调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作;将所述第一锁的锁标识更新至所述第一线程的历史加锁记录中;或
显示提示信息;若接收到用户根据所述提示信息输入的操作指令,则根据所述操作指令,调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作;将所述第一锁的锁标识更新至所述第一线程的历史加锁记录中。
5.根据权利要求3或4所述的方法,其特征在于,所述方法还包括:
在调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作之后,当对所述第一线程执行解锁操作时,获取针对所述第一线程的第一锁的锁标识;
从所述第一线程的当前加锁记录中删除所述第一锁的锁标识;
调用解锁函数,利用所述第一锁对所述第一线程执行解锁操作。
6.一种信息处理装置,其特征在于,所述装置包括:
获取单元,用于当对第一线程执行加锁操作时,获取针对所述第一线程的第一锁的锁标识;
第一更新单元,用于将所述第一锁的锁标识更新至所述第一线程的当前加锁记录中;所述第一线程的当前加锁记录中包括的锁标识按照对所述第一线程执行加锁操作的时间顺序排序,所述第一线程的当前加锁记录中记录了当前所述第一线程所加的锁;
查找单元,用于在第二线程的历史加锁记录中,查找与所述第一锁关联且记录在所述当前加锁记录中的死锁历史记录;所述第二线程的历史加锁记录中包括的锁标识按照对所述第二线程执行加锁操作的时间顺序排序,所述第二线程的历史加锁记录中记录了所述第二线程所加过的所有锁,历史加锁记录中记录在当前加锁记录中的死锁历史记录为:历史加锁记录中与当前加锁记录中锁标识的时间顺序相反的历史加锁记录,第一锁关联的死锁历史记录为:包括第一锁的锁标识的历史加锁记录;
显示单元,用于在所述查找单元查找到所述死锁历史记录的情况下,显示所述第二线程与所述死锁历史记录的对应关系;
加锁单元,用于在显示所述第二线程与所述死锁历史记录的对应关系之后,利用所述第一锁对所述第一线程执行加锁操作;
第二更新单元,用于将所述第一锁的锁标识更新至所述第一线程的历史加锁记录中。
7.根据权利要求6所述的装置,其特征在于,所述获取单元具体用于:
当通过应用程序编程接口API对第一线程执行加锁操作时,运行所述API上加载的调试代码,获取针对所述第一线程的第一锁的锁标识。
8.根据权利要求6所述的装置,其特征在于,
所述加锁单元,还用于在所述查找单元未查找到所述死锁历史记录的情况下,则调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作。
9.根据权利要求6所述的装置,其特征在于,所述加锁单元,具体用于在显示所述第二线程与所述死锁历史记录的对应关系之后,调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作;或,用于在显示所述第二线程与所述死锁历史记录的对应关系之后,显示提示信息;若接收到用户根据所述提示信息输入的操作指令,则根据所述操作指令,调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作。
10.根据权利要求8或9所述的装置,其特征在于,所述装置还包括删除单元和解锁单元;
所述获取单元,还用于在调用加锁函数,利用所述第一锁对所述第一线程执行加锁操作之后,当对所述第一线程执行解锁操作时,获取针对所述第一线程的第一锁的锁标识;
所述删除单元,用于从所述第一线程的当前加锁记录中删除所述第一锁的锁标识;
所述解锁单元,用于调用解锁函数,利用所述第一锁对所述第一线程执行解锁操作。
11.一种电子设备,其特征在于,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器被所述机器可执行指令促使:实现权利要求1-5任一所述的方法步骤。
12.一种机器可读存储介质,其特征在于,存储有机器可执行指令,在被处理器调用和执行时,所述机器可执行指令促使所述处理器:实现权利要求1-5任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811287412.2A CN109445951B (zh) | 2018-10-31 | 2018-10-31 | 一种信息处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811287412.2A CN109445951B (zh) | 2018-10-31 | 2018-10-31 | 一种信息处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109445951A CN109445951A (zh) | 2019-03-08 |
CN109445951B true CN109445951B (zh) | 2020-09-25 |
Family
ID=65549243
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811287412.2A Active CN109445951B (zh) | 2018-10-31 | 2018-10-31 | 一种信息处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109445951B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831557B (zh) * | 2020-06-19 | 2023-10-20 | 北京华三通信技术有限公司 | 死锁检测的方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1021098A (ja) * | 1996-06-29 | 1998-01-23 | Nec Corp | 排他制御装置 |
CN103678122A (zh) * | 2013-11-29 | 2014-03-26 | 华为技术有限公司 | 一种死锁检测方法、设备及系统 |
CN103761182A (zh) * | 2013-12-26 | 2014-04-30 | 上海华为技术有限公司 | 一种死锁检测方法及装置 |
CN107479980A (zh) * | 2016-06-08 | 2017-12-15 | 阿里巴巴集团控股有限公司 | 一种检测应用中死锁的方法与设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105740080B (zh) * | 2016-03-11 | 2019-02-22 | 深圳市茁壮网络股份有限公司 | 一种程序卡死检测方法及处理器 |
-
2018
- 2018-10-31 CN CN201811287412.2A patent/CN109445951B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1021098A (ja) * | 1996-06-29 | 1998-01-23 | Nec Corp | 排他制御装置 |
CN103678122A (zh) * | 2013-11-29 | 2014-03-26 | 华为技术有限公司 | 一种死锁检测方法、设备及系统 |
CN103761182A (zh) * | 2013-12-26 | 2014-04-30 | 上海华为技术有限公司 | 一种死锁检测方法及装置 |
CN107479980A (zh) * | 2016-06-08 | 2017-12-15 | 阿里巴巴集团控股有限公司 | 一种检测应用中死锁的方法与设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109445951A (zh) | 2019-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7908521B2 (en) | Process reflection | |
US7284238B2 (en) | Multithread tracing method and apparatus | |
CN108399132B (zh) | 一种调度测试方法、装置及存储介质 | |
CN110225078B (zh) | 一种应用服务更新方法、系统及终端设备 | |
CN111258850B (zh) | 一种基于Linux系统的更新软件信息的方法及装置 | |
US20180024874A1 (en) | Anomaly detection using sequences of system calls | |
EP0716377B1 (en) | Deadlock detection mechanism | |
CN109445951B (zh) | 一种信息处理方法及装置 | |
US20070039000A1 (en) | Lock order determination method and system | |
CN108229147B (zh) | 一种基于Android虚拟容器的内存检测装置及方法 | |
CN112988503A (zh) | 分析方法、分析装置、电子装置和存储介质 | |
CN109960658B (zh) | 应用程序编程接口测试方法、装置、电子设备及存储介质 | |
CN111124545A (zh) | 应用程序启动方法、装置、电子设备及存储介质 | |
CN112988277B (zh) | 规则文件加载方法、装置、服务器及介质 | |
CN111831557B (zh) | 死锁检测的方法及装置 | |
CN111797016B (zh) | 应用程序的测试方法、设备、存储介质及装置 | |
CN115878336A (zh) | 锁操作中的信息处理方法、装置及计算设备 | |
CN113032100A (zh) | 一种异常处理方法、装置、设备及存储介质 | |
CN115809150A (zh) | 一种分布式死锁检测方法、装置及电子设备 | |
CN113127874A (zh) | 内网敏感信息处理方法及装置 | |
CN113360164B (zh) | 快速部署应用的方法、装置及存储介质 | |
CN115080355B (zh) | 一种监控日志的生成方法及装置 | |
CN111625853B (zh) | 一种快照处理方法、装置、设备及可读存储介质 | |
CN116954867A (zh) | 一种内核保护系统禁用方法、装置、设备及存储介质 | |
CN111026435A (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 |