一种基于动态分析的多线程死锁检测方法技术

技术编号:39000336 阅读:11 留言:0更新日期:2023-10-07 10:32
本发明专利技术公开了软件检测技术领域的一种基于动态分析的多线程死锁检测方法,包括:启动两个线程通过一个互斥锁访问同一个共享变量;访问共享变量前每个线程必须同时获取两个互斥锁;对待测软件源程序中的变量进行别名分析,生成指向分析图;测试用例是否触发了新路径,判断生成的新路径是否唯一有效,生成待执行任务;对待执行任务处理请求中的格式化任务数据创建线程,选择有效路径进行检测,该基于动态分析的多线程死锁检测方法,结构设计合理,能够适用于其他线程中,实现同步与互斥,用于多个线程对共享数据互斥访问,能够在获取锁时,等待超过时限的时候不会一直等待,而是返回错误信息,能够有效避免死锁问题。能够有效避免死锁问题。能够有效避免死锁问题。

【技术实现步骤摘要】
一种基于动态分析的多线程死锁检测方法


[0001]本专利技术涉及软件检测
,具体为一种基于动态分析的多线程死锁检测方法。

技术介绍

[0002]软件测试是在软件投入运行前,对软件需求分析、设计规格说明和编码实现的最终审查,是软件质量保证的关键步骤,软件测试是为了发现错误而执行程序的过程,在一个可控的软件测试环境中分析或执行程序,其根本目的是以尽可能少的时间和人力发现并改正软件中潜在的各种故障及缺陷,提高软件的质量。
[0003]现有的检测方法在进行检测时,当数据请求数量大的,系统的响应速度会变慢,只能够对于一个线程进行检测,不适用于别的线程,并且与其他线程之间无法通用,同时,检测时当部分大数据量任务处理时间过长,会处于一直等待的状态,无法进行返回,并且无法对显示错误信息,导致死锁,为此我们提出了一种基于动态分析的多线程死锁检测方法。

技术实现思路

[0004]本专利技术的目的在于提供一种基于动态分析的多线程死锁检测方法,以解决上述
技术介绍
中提出了现有的检测方法在进行检测时,当数据请求数量大的,系统的响应速度会变慢,只能够对于一个线程进行检测,不适用于别的线程,并且与其他线程之间无法通用,同时,检测时当部分大数据量任务处理时间过长,会处于一直等待的状态,无法进行返回,并且无法对显示错误信息,导致死锁的问题。
[0005]为实现上述目的,本专利技术提供如下技术方案:一种基于动态分析的多线程死锁检测方法,包括:
[0006]启动两个线程通过一个互斥锁访问同一个共享变量;
>[0007]访问共享变量前每个线程必须同时获取两个互斥锁;
[0008]对待测软件源程序中的变量进行别名分析,生成指向分析图;
[0009]测试用例是否触发了新路径,判断生成的新路径是否唯一有效,生成待执行任务;
[0010]对待执行任务处理请求中的格式化任务数据创建线程,选择有效路径进行检测。
[0011]优选的,所述的两个线程通过一个互斥锁访问同一个共享变量,一个线程已经锁定了一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程将被挂起,直到第一个线程解除对这个互斥量的锁定为止,第二个线程则被唤醒并继续执行,同时锁定这个互斥量。
[0012]优选的,所述的变量前每个线程必须同时获取两个互斥锁,一个线程锁定了一个互斥量,在它解除锁定之前,没有其他线程可以锁定这个互斥量。
[0013]优选的,在使用前应用程序必须执行了加锁互斥量,两函数在调用时自动解锁互斥量,等待条件互斥量触发,这时线程挂起,不占用CPU,前者直到条件变量被触发,后者等待条件变量被触发或者超时,函数返回前,自动重新对互斥量自动加锁。
[0014]优选的,条件变量要和互斥量相联结,以避免出现条件竞争,一个线程预备等待一个条件变量。
[0015]优选的,所述的软件源程序中的变量进行别名分析,根据软件源程序中实例的不同采取不同方式的计算,同时剩余的计算功能也存在较大的差异,确定好对象实例的绑定参数和变量,借助函数例化的处理方法,采用多变异方式,借助不同绑定的设置。
[0016]优选的,所述的新路径是否唯一,对输入的测试用例进行分析和测试,判断测试用例的有效性和稳定性,直到确保输入的测试用例能够触发有效的新路径。
[0017]优选的,一个线程没有在给定的时限内成功获得所有需要的锁,则会进行回退并释放所有已经获得的锁,然后等待一段随机的时间再重试,每当一个线程获得了锁,会在线程和锁相关的数据结构中,将其记下,每当有线程请求锁,也需要记录在这个数据结构中。
[0018]优选的,协作对象之间发生死锁,调用某个方法时就需要持有锁,在方法内部调用了其他带锁的方法,调用某个方法时不需要持有锁,同步代码块保护共享状态。
[0019]与现有技术相比,本专利技术的有益效果是:
[0020]1、该基于动态分析的多线程死锁检测方法,通过启动两个线程,两个线程通过一个互斥锁访问同一个共享变量,一个线程已经锁定了一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程将被挂起,直到第一个线程解除对这个互斥量的锁定为止,变量前每个线程必须同时获取两个互斥锁,一个线程锁定了一个互斥量,在它解除锁定之前,没有其他线程可以锁定这个互斥量,从而能够适用于其他线程中,实现同步与互斥,用于多个线程对共享数据互斥访问。
[0021]2、该基于动态分析的多线程死锁检测方法,判断生成的新路径是否唯一有效,根据软件源程序中实例的不同采取不同方式的计算,同时剩余的计算功能也存在较大的差异,确定好对象实例的绑定参数和变量,对输入的测试用例进行分析和测试,判断测试用例的有效性和稳定性,直到确保输入的测试用例能够触发有效的新路径,一个线程没有在给定的时限内成功获得所有需要的锁,则会进行回退并释放所有已经获得的锁,调用某个方法时就需要持有锁,在方法内部调用了其他带锁的方法,调用某个方法时不需要持有锁,同步代码块保护共享状态,从而能够在获取锁时,等待超过时限的时候不会一直等待,而是返回错误信息,能够有效避免死锁问题。
附图说明
[0022]图1为本专利技术实施例提供的一种基于动态分析的多线程死锁检测方法流程图。
具体实施方式
[0023]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0024]实施例一:
[0025]请参阅图1,本专利技术提供一种技术方案:一种基于动态分析的多线程死锁检测方法,包括:
[0026]启动两个线程通过一个互斥锁访问同一个共享变量;
[0027]访问共享变量前每个线程必须同时获取两个互斥锁;
[0028]对待测软件源程序中的变量进行别名分析,生成指向分析图;
[0029]测试用例是否触发了新路径,判断生成的新路径是否唯一有效,生成待执行任务;
[0030]对待执行任务处理请求中的格式化任务数据创建线程,选择有效路径进行检测。
[0031]所述的两个线程通过一个互斥锁访问同一个共享变量,一个线程已经锁定了一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程将被挂起,直到第一个线程解除对这个互斥量的锁定为止,第二个线程则被唤醒并继续执行,同时锁定这个互斥量。
[0032]所述的变量前每个线程必须同时获取两个互斥锁,一个线程锁定了一个互斥量,在它解除锁定之前,没有其他线程可以锁定这个互斥量。
[0033]在使用前应用程序必须执行了加锁互斥量,两函数在调用时自动解锁互斥量,等待条件互斥量触发,这时线程挂起,不占用CPU,前者直到条件变量被触发,后者等待条件变量被触发或者超时,函数返回前,自动重新对互斥量自动加锁。
[0034]条件变量要和互斥量相联结,以避免出现条件竞争,一个线程预备等本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于动态分析的多线程死锁检测方法,其特征在于:包括:启动两个线程通过一个互斥锁访问同一个共享变量;访问共享变量前每个线程必须同时获取两个互斥锁;对待测软件源程序中的变量进行别名分析,生成指向分析图;测试用例是否触发了新路径,判断生成的新路径是否唯一有效,生成待执行任务;对待执行任务处理请求中的格式化任务数据创建线程,选择有效路径进行检测。2.根据权利要求1所述的一种基于动态分析的多线程死锁检测方法,其特征在于:所述的两个线程通过一个互斥锁访问同一个共享变量,一个线程已经锁定了一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程将被挂起,直到第一个线程解除对这个互斥量的锁定为止,第二个线程则被唤醒并继续执行,同时锁定这个互斥量。3.根据权利要求1所述的一种基于动态分析的多线程死锁检测方法,其特征在于:所述的变量前每个线程必须同时获取两个互斥锁,一个线程锁定了一个互斥量,在它解除锁定之前,没有其他线程可以锁定这个互斥量。4.根据权利要求3所述的一种基于动态分析的多线程死锁检测方法,其特征在于:在使用前应用程序必须执行了加锁互斥量,两函数在调用时自动解锁互斥量,等待条件互斥量触发,这时线程挂起,不占用CPU,前者直到条件变量被触发,后者等待条件变量被触发或者超时,函数返回前,自动重新对互斥量自动加锁。5.根据权利要...

【专利技术属性】
技术研发人员:毛新华王晨旭茹媛祯李灿马龙张洪岭张鹏
申请(专利权)人:合肥中科云数科技有限公司
类型:发明
国别省市:

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

1