一种基于LINUX的多线程死锁问题定位方法及系统与流程

文档序号:21847627发布日期:2020-08-14 17:13阅读:752来源:国知局
一种基于LINUX的多线程死锁问题定位方法及系统与流程

本申请涉及嵌入式领域,具体而言,涉及一种基于linux的多线程死锁问题定位方法。



背景技术:

多个任务在没有互相同步的情况下,同时访问linux中的一些共享资源(全局变量,链表等),会导致linux进入不稳定的竞争状态;linux中锁的使用,就是为了保护这些共享资源,同步多任务对共享资源的访问。

对锁的不恰当使用,有可能会导致死锁(锁不释放导致其他任务无法获取锁而无法运行)的问题。比如锁的递归使用(在已经获得锁的情况下,再去申请对该锁的使用);在拥有锁的代码中休眠(在获得锁的情况下,调用了会导致任务休眠的函数);在锁保护的临界区代码执行时,任务被抢占。对这些死锁问题的定位需要运用一些调试手段。

比较常用的调试方法是加入打印日志信息,在进入临界区之前和出临界区之后,分别加上不同的调试信息,用日志文件来保存这些调试信息,之后再分析日志文件来定位死锁问题。

有些锁,获取和释放都很频繁,如果使用加入打印日志信息的方法,会导致日志信息过多,造成日志缺失。过多的打印日志信息,也会难以分析和定义问题。



技术实现要素:

本申请的主要目的在于提供一种基于linux的多线程死锁问题定位方法,包括:

临界区代码进入锁保护的临界区之前开启定时器;

在所述定时器的到期处理函数中,保存死锁的现场,加入调试信息;

复现死锁的现象;

分析所述到期函数的输出信息;并获得分析结果;

根据所述分析结果定位死锁的位置和原因。

可选地,基于linux的多线程死锁问题定位方法还包括:

找到对应的所述临界区代码。

可选地,基于linux的多线程死锁问题定位方法中,所述定时器的定时时间大于所述临界区代码的运行时间。

可选地,基于linux的多线程死锁问题定位方法中,所述调试信息包括:获取锁的任务名,获取锁的代码地址。

可选地,基于linux的多线程死锁问题定位方法还包括:

所述临界区代码出临界区后,删除所述定时器。

可选地,基于linux的多线程死锁问题定位方法中,所述输出信息为打印信息。

根据本申请的另一个方面,还提供了一种基于linux的多线程死锁问题定位方法,包括:

寻找模块,用于找到对应的所述临界区代码;

定时器开启模块,用于临界区代码进入锁保护的临界区之前开启定时器;

保存模块,用于在所述定时器的到期处理函数中,保存死锁的现场,加入调试信息;

删除模块,用于所述临界区代码出临界区后,删除所述定时器;

复现模块,用于复现死锁的现象;

分析模块,用于分析所述到期函数的输出信息;并获得分析结果;

定位模块,用于根据所述分析结果定位死锁的位置和原因。

本申请还公开了一种计算机设备,包括存储器、处理器和存储在所述存储器内并能由所述处理器运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的方法。

本申请还公开了一种计算机可读存储介质,非易失性可读存储介质,其内存储有计算机程序,所述计算机程序在由处理器执行时实现上述任一项所述的方法。

本申请还公开了一种计算机程序产品,包括计算机可读代码,当所述计算机可读代码由计算机设备执行时,导致所述计算机设备执行上述任一项所述的方法。

与现有技术相比,本申请具有如下有益效果:

本发明通过linux定时器和定时器的到期处理函数,来定位多线程死锁。锁保护的临界代码,一般都比较短小,执行时间很短;可以在进入临界区之前,开启一个定时器,定时器设置的时间远大于临界代码执行的时间,定时器的到期处理函数中加入相关的调试信息;临界区代码执行完毕后,再删除该定时器(如果在定时器到期之前删除的话,定时器不会到期,处理函数也不会运行)。这样只有在锁不释放(死锁)的情况下,定时器的到期处理函数才会被调用,会大大减少一些无用的打印信息,方便定位问题。

附图说明

构成本申请的一部分的附图用来提供对本申请的进一步理解,使得本申请的其它特征、目的和有益效果变得更明显。本申请的示意性实施例附图及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请一个实施例的基于linux的多线程死锁问题定位方法的流程示意图;

图2是根据本申请一个实施例的基于linux的多线程死锁问题定位方法的流程示意图;

图3是根据本申请一个实施例的计算机设备的示意图;以及

图4是根据本申请一个实施例的计算机可读存储介质的示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

请参照图1-2,本申请一实施例提供了一种基于linux的多线程死锁问题定位方法,包括:

s2:临界区代码进入锁保护的临界区之前开启定时器;

s4:在所述定时器的到期处理函数中,保存死锁的现场,加入调试信息;

s6:复现死锁的现象;

s8:分析所述到期函数的输出信息;并获得分析结果;

s10:根据所述分析结果定位死锁的位置和原因。

例如,在进入临界区之前,开启一个定时器,并设置好定时器的定时时间(远大于临界代码运行时间)。在定时器的到期处理函数中,保存死锁的现场,加入一些调试信息。复现死锁的现象后,分析定时器到期函数中输出的信息,定位死锁的位置和原因。

本发明通过linux定时器和定时器的到期处理函数,来定位多线程死锁。锁保护的临界代码,一般都比较短小,执行时间很短;可以在进入临界区之前,开启一个定时器,定时器设置的时间远大于临界代码执行的时间,定时器的到期处理函数中加入相关的调试信息;临界区代码执行完毕后,再删除该定时器(如果在定时器到期之前删除的话,定时器不会到期,处理函数也不会运行)。这样只有在锁不释放(死锁)的情况下,定时器的到期处理函数才会被调用,会大大减少一些无用的打印信息,方便定位问题。

在本申请一实施例中,基于linux的多线程死锁问题定位方法还包括:

找到对应的所述临界区代码。

例如,找到对应的临界区代码,在进入临界区之前,开启一个定时器,并设置好定时器的定时时间(远大于临界代码运行时间)。在定时器的到期处理函数中,保存死锁的现场,加入一些调试信息。复现死锁的现象后,分析定时器到期函数中输出的信息,定位死锁的位置和原因。

在本申请一实施例中,所述调试信息包括:获取锁的任务名,获取锁的代码地址。

例如,找到对应的临界区代码,在进入临界区之前,开启一个定时器,并设置好定时器的定时时间(远大于临界代码运行时间)。在定时器的到期处理函数中,保存死锁的现场,加入获取锁的任务名,获取锁的代码地址等。复现死锁的现象后,分析定时器到期函数中输出的信息,定位死锁的位置和原因。

在本申请一实施例中,所述临界区代码出临界区后,删除所述定时器。

例如,找到对应的临界区代码,在进入临界区之前,开启一个定时器,并设置好定时器的定时时间(远大于临界代码运行时间)。在定时器的到期处理函数中,保存死锁的现场,加入获取锁的任务名,获取锁的代码地址等。代码出临界区后,删除定时器。复现死锁的现象后,分析定时器到期函数中输出的信息,定位死锁的位置和原因。

在本申请一实施例中,所述输出信息为打印信息。

例如,找到对应的临界区代码,在进入临界区之前,开启一个定时器,并设置好定时器的定时时间(远大于临界代码运行时间)。在定时器的到期处理函数中,保存死锁的现场,加入一些调试信息(比如获取锁的任务名,获取锁的代码地址等)。代码出临界区后,删除定时器。复现死锁的现象后,分析定时器到期函数中输出的打印信息,定位死锁的位置和原因。

在本申请一实施例中还提供了一种基于linux的多线程死锁问题定位方法,包括:

寻找模块,用于找到对应的所述临界区代码;

定时器开启模块,用于临界区代码进入锁保护的临界区之前开启定时器;

保存模块,用于在所述定时器的到期处理函数中,保存死锁的现场,加入调试信息;

删除模块,用于所述临界区代码出临界区后,删除所述定时器;

复现模块,用于复现死锁的现象;

分析模块,用于分析所述到期函数的输出信息;并获得分析结果;

定位模块,用于根据所述分析结果定位死锁的位置和原因。

与现有技术相比,本申请具有如下有益效果:

本发明通过linux定时器和定时器的到期处理函数,来定位多线程死锁。锁保护的临界代码,一般都比较短小,执行时间很短;可以在进入临界区之前,开启一个定时器,定时器设置的时间远大于临界代码执行的时间,定时器的到期处理函数中加入相关的调试信息;临界区代码执行完毕后,再删除该定时器(如果在定时器到期之前删除的话,定时器不会到期,处理函数也不会运行)。这样只有在锁不释放(死锁)的情况下,定时器的到期处理函数才会被调用,会大大减少一些无用的打印信息,方便定位问题。

请参照图3,本申请还提供了一种计算机设备,包括存储器、处理器和存储在所述存储器内并能由所述处理器运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的方法。

请参照图4,一种计算机可读存储介质,非易失性可读存储介质,其内存储有计算机程序,所述计算机程序在由处理器执行时实现上述任一项所述的方法。

一种计算机程序产品,包括计算机可读代码,当所述计算机可读代码由计算机设备执行时,导致所述计算机设备执行上述任一项所述的方法。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1