CN111124933A - 一种基于Petri构件的软件线程冲突检测方法 - Google Patents
一种基于Petri构件的软件线程冲突检测方法 Download PDFInfo
- Publication number
- CN111124933A CN111124933A CN201911404625.3A CN201911404625A CN111124933A CN 111124933 A CN111124933 A CN 111124933A CN 201911404625 A CN201911404625 A CN 201911404625A CN 111124933 A CN111124933 A CN 111124933A
- Authority
- CN
- China
- Prior art keywords
- petri
- detected
- variable
- component
- thread
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于Petri构件的软件线程冲突检测方法,Petri构件的基础构件由若干个变迁、库所、令牌和有向弧组成;冲突类型分为信号量、条件变量、读写锁和栅栏;其特征是依据冲突类型同时或分别对待检测线种进行冲突检测,并根据如下S1和S2两个步骤进行:S1:建立待检测线程的Petri构件模型;S2:对期待检测的Petri构件模型进行冲突检测。本发明能够检测由于信号量、条件变量、读写锁和栅栏引发的冲突,为软件线线冲突提供了一种新的方法。
Description
技术领域
本发明涉及计算机软件技术、软件线程运行可靠性检测领域,具体地说,涉及一种基于Petri构件的软件线程冲突检测方法。
背景技术
信息技术的快速发展,很大程度上是依托于信息技术中的软件技术。当下软件开发技术中的程序运行,在多CPU与大内存容量的硬件资源支撑下,传统单进程单线程程序显然不能适应软件发展步伐,唯有并发程序才能适应用户的需求。然而并发程序虽然有运算速度快,适应用户使用体验好的良好特性,但其具有较高的复杂度和难以把握的可靠性,特别是当诸多线程对资源利用不科学或不合理之时,将发现资源利用出现冲突的问题,严重影响程序运行的安全性。特别是随着多核CPU的广泛普及,软件开发中线程并行计算中的资源利用冲突检测问题已经成为计算机技术领域重点关注的问题之一。
在实现本发明的过程中,发明人发现现有技术与方法,有一些方法对软件线程冲突检测有作用,然而,在直观性和可视化方面存在这样或那样的不足,方法运用的用户体验上不够。
发明内容
本发明的目的在于针对上述技术背景下存在的一系列问题,提出一种基于Petri构件的软件线程冲突检测方法,既可能有效解决计算机软件开发涉及多线程资源利用争抢冲突的问题,同时还在检测的直观性和可视化方面突显出独有的优势。
本发明为解决问题采用的技术方案为一种基于Petri构件的软件线程冲突检测方法,Petri构件的基础构件由若干个变迁、库所、令牌和有向弧组成;冲突类型分为信号量、条件变量、读写锁和栅栏;其特征是依据冲突类型同时或分别对待检测线种进行冲突检测,并根据如下S1和S2两个步骤进行:S1:建立待检测线程的Petri构件模型;S2:对期待检测的Petri构件模型进行冲突检测。
首先步骤S1为通过建立待检测线程的Petri构件模型,其中操作包括:
1.对所述以待于检测的软件线程所对应的所述条件变量配置资源、所述读写锁配置资源、所述的信号量配置资源和所述栅栏配置资源;所述条件变量配置资源包括条件处理函数、条件变量和互斥锁变量;所述信号量配置资源包括信号量和信号量处理函数;所示栅栏配置资源包括栅栏变量和栅栏处理函数;
2.对所述以待于检测的软件线程所对应的所述条件变量配置资源、所述读写锁配置资源、所述的信号量配置资源和所述栅栏配置资源,分别提取所述信号量、条件变量、读写锁和栅栏;并构建与所述读写锁变量相对应的库所、与所述互斥锁变量相对应的库所,与存储于资源中的条件变量对应的库所、与存储于资源中的信息量相对应的库所以及与所述栅栏变量所对应的库所;
3.对所述以待于检测的软件线程所对应的所述读写变量所对应的库所分别构建加读写锁变量的辅助数据结构;所述读写锁变量的数据结构为保存所述读写锁变量的属性,所述读写锁变量的属性包括加锁的线程列表、线程资源数量,以及加锁类型,所述线程的条件变量的辅助数据结构为记录资源中的条件变量值,该属性值赋予条件是否满足;所述线程的信号量辅助数据结构为记录资源的信号量值;所述线程的栅栏变量数据结构为记录栅栏变量的属性,其属性包括可执行线程、等待线程和所有线程列表;
4.对所述以待于检测的软件线程所对应的所述读写资源中的每个读写处理函数与Petri构件模型中的读写锁变迁相对应地设置,同时构建出所述读写锁处理函数的Petri构件实例;将信号号与Petri构件实例中的一个死锁类型信号量的变迁相对应地配置;
5.将Petri构件实例与待检测软件进程的主体函数库所对应,通过所述待检测进行中的函数调用关系的次序,以及所述函数调用关系内所嵌入的读写锁处理函数、信号量处理函数、条件变量处理函数和栅栏处理函数。
其次步骤S2为对期待检测的Petri构件模型进行冲突检测。具体操作包括:
1.初始化所述待检测Petri构件实例的状态并进行记录,使得所述待检测软件进程中的主体函数获得对应的库所具有令牌,所述读写变量对应库所获得令牌,并配置一个缓存堆栈;
2.初演所述待检测Petri构件实例,从所述待检测软件进程中的主体函数获得对应的库所推演执行;
3.考察Petri构件实例,看是否已经具备可以推演执行的变迁,如果具备则进入b4步骤,否则推演入b6步骤;
4.将所述的具备推演展开的变迁暂存于缓存堆栈内,同时记录下其没有被推演执行的状态;
5.将所述的缓存堆栈中的栈顶要互对应于变迁设置为执行同时将其属性值设计为已经推演执行;所述已经推演执行变迁对应的输入库所的令牌由此移动置于输出库所位置,所述待检测Petri构件实例的状态也进行更新,存储所述新的待检测Petri构件实例状态后,返回步骤b3继续推演执行;
6.考察待检测Petri构件实例中是否还有没有推演执行的变迁,如果存在则表示存在线程冲突,同时提供所已经推演的所有成功执行的变迁,检测停止。
与现有技术和方法相比,本基于Petri构件的软件线程冲突检测方法的良好特性与有益效果在于:
1、本方法所使用的方法具有良好的直观性和可视化特点;
2、本发明可以直观地显现出检测条件变量、读写锁、信号量、栅栏引发的冲突,而且能够在出现冲突时,将所有执行过程进行重新推演,增强了检测实用的全面性;
3、本发明对传统模型进行了扩充,通过对条件变量、读写锁、信号量、栅栏对应的库所对应的变迁添加辅助数据结构,从而可以更加完善地表达对条件变量函数、读写锁函数、信号量函数、栅栏处理函数的执行情况;
4、本发明采用的冲突检测方法中使用了堆栈存储策略,可以快速高效地显现允许执行的变迁,可以快速地回退到上一个被允许但未执行的变迁,从而确保待检测进程所有线程可能执行的路径都可以被检测到。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明一种基于Petri构件的软件线程冲突检测方法示意图。
具体实施方式
以下通过实施例形式对本发明的上述内容再作进一步的详细说明,但不应将此理解为本发明上述主题的范围仅限于以下的实施例。
Petri构件的基础构件由若干个变迁、库所、令牌和有向弧组成;冲突类型分为信号量、条件变量、读写锁和栅栏;其特征是依据冲突类型同时或分别对待检测线种进行冲突检测,并根据如下S1和S2两个步骤进行:S1:建立待检测线程的Petri构件模型;S2:对期待检测的Petri构件模型进行冲突检测。
首先步骤S1为通过建立待检测线程的Petri构件模型,其中操作包括:
1.对所述以待于检测的软件线程所对应的所述条件变量配置资源、所述读写锁配置资源、所述的信号量配置资源和所述栅栏配置资源;所述条件变量配置资源包括条件处理函数、条件变量和互斥锁变量;所述信号量配置资源包括信号量和信号量处理函数;所示栅栏配置资源包括栅栏变量和栅栏处理函数;
2.对所述以待于检测的软件线程所对应的所述条件变量配置资源、所述读写锁配置资源、所述的信号量配置资源和所述栅栏配置资源,分别提取所述信号量、条件变量、读写锁和栅栏;并构建与所述读写锁变量相对应的库所、与所述互斥锁变量相对应的库所,与存储于资源中的条件变量对应的库所、与存储于资源中的信息量相对应的库所以及与所述栅栏变量所对应的库所;
3.对所述以待于检测的软件线程所对应的所述读写变量所对应的库所分别构建加读写锁变量的辅助数据结构;所述读写锁变量的数据结构为保存所述读写锁变量的属性,所述读写锁变量的属性包括加锁的线程列表、线程资源数量,以及加锁类型,所述线程的条件变量的辅助数据结构为记录资源中的条件变量值,该属性值赋予条件是否满足;所述线程的信号量辅助数据结构为记录资源的信号量值;所述线程的栅栏变量数据结构为记录栅栏变量的属性,其属性包括可执行线程、等待线程和所有线程列表;
4.对所述以待于检测的软件线程所对应的所述读写资源中的每个读写处理函数与Petri构件模型中的读写锁变迁相对应地设置,同时构建出所述读写锁处理函数的Petri构件实例;将信号号与Petri构件实例中的一个死锁类型信号量的变迁相对应地配置;
5.将Petri构件实例与待检测软件进程的主体函数库所对应,通过所述待检测进行中的函数调用关系的次序,以及所述函数调用关系内所嵌入的读写锁处理函数、信号量处理函数、条件变量处理函数和栅栏处理函数。
其次步骤S2为对期待检测的Petri构件模型进行冲突检测。具体操作包括:
1.初始化所述待检测Petri构件实例的状态并进行记录,使得所述待检测软件进程中的主体函数获得对应的库所具有令牌,所述读写变量对应库所获得令牌,并配置一个缓存堆栈;
2.初演所述待检测Petri构件实例,从所述待检测软件进程中的主体函数获得对应的库所推演执行;
3.考察Petri构件实例,看是否已经具备可以推演执行的变迁,如果具备则进入b4步骤,否则推演入b6步骤;
4.将所述的具备推演展开的变迁暂存于缓存堆栈内,同时记录下其没有被推演执行的状态;
5.将所述的缓存堆栈中的栈顶要互对应于变迁设置为执行同时将其属性值设计为已经推演执行;所述已经推演执行变迁对应的输入库所的令牌由此移动置于输出库所位置,所述待检测Petri构件实例的状态也进行更新,存储所述新的待检测Petri构件实例状态后,返回步骤b3继续推演执行;
6.考察待检测Petri构件实例中是否还有没有推演执行的变迁,如果存在则表示存在线程冲突,同时提供所已经推演的所有成功执行的变迁,检测停止。
Claims (3)
1.一种基于Petri构件的软件线程冲突检测方法,所述的Petri构件模型的构件由由若干个变迁、库所、令牌和有向弧组成;所述变迁与库所通过所述的有向弧进行连接,根据有向弧的路径方向,将所述库所分析所述变迁输出库所和输入库所;当所述变迁的输入库所具有令牌时,则表示所述变迁具有执行资源,相应变迁就不会产生冲突而被执行;所冲突类型分为信号量、条件变量、读写锁和栅栏;其特征为,根据冲突类型对待待检测线程依据如下步骤进行冲突检测:
1.1.建立待检测线程的Petri构件模型;
1.2.对期待检测的Petri构件模型进行充实检测。
2.根据权利要求1所述的一种基于Petri构件的软件线程冲突检测方法,其特征在于,在步骤1.1中,所述建立待检测线程的Petri构件模型的操作,具体包括:
2.1.对所述以待于检测的软件线程所对应的所述条件变量配置资源、所述读写锁配置资源、所述的信号量配置资源和所述栅栏配置资源;所述条件变量配置资源包括条件处理函数、条件变量和互斥锁变量;所述信号量配置资源包括信号量和信号量处理函数;所示栅栏配置资源包括栅栏变量和栅栏处理函数;
2.2.对所述以待于检测的软件线程所对应的所述条件变量配置资源、所述读写锁配置资源、所述的信号量配置资源和所述栅栏配置资源,分别提取所述信号量、条件变量、读写锁和栅栏;并构建与所述读写锁变量相对应的库所、与所述互斥锁变量相对应的库所,与存储于资源中的条件变量对应的库所、与存储于资源中的信息量相对应的库所以及与所述栅栏变量所对应的库所;
2.3.对所述以待于检测的软件线程所对应的所述读写变量所对应的库所分别构建加读写锁变量的辅助数据结构;所述读写锁变量的数据结构为保存所述读写锁变量的属性,所述读写锁变量的属性包括加锁的线程列表、线程资源数量,以及加锁类型,所述线程的条件变量的辅助数据结构为记录资源中的条件变量值,该属性值赋予条件是否满足;所述线程的信号量辅助数据结构为记录资源的信号量值;所述线程的栅栏变量数据结构为记录栅栏变量的属性,其属性包括可执行线程、等待线程和所有线程列表;
2.4.对所述以待于检测的软件线程所对应的所述读写资源中的每个读写处理函数与Petri构件模型中的读写锁变迁相对应地设置,同时构建出所述读写锁处理函数的Petri构件实例;将信号号与Petri构件实例中的一个死锁类型信号量的变迁相对应地配置;
2.5.将Petri构件实例与待检测软件进程的主体函数库所对应,通过所述待检测进行中的函数调用关系的次序,以及所述函数调用关系内所嵌入的读写锁处理函数、信号量处理函数、条件变量处理函数和栅栏处理函数。
3.根据权利要求1所述的一种基于Petri构件的软件线程冲突检测方法,其特征在于,在步骤1.2中,所述对期待检测的Petri构件模型进行充实检测的操作,具体包括:
3.1.初始化所述待检测Petri构件实例的状态并进行记录,使得所述待检测软件进程中的主体函数获得对应的库所具有令牌,所述读写变量对应库所获得令牌,并配置一个缓存堆栈;
3.2.初演所述待检测Petri构件实例,从所述待检测软件进程中的主体函数获得对应的库所推演执行;
3.3.考察Petri构件实例,看是否已经具备可以推演执行的变迁,如果具备则进入3.4步骤,否则推演入3.6步骤;
3.4.将所述的具备推演展开的变迁暂存于缓存堆栈内,同时记录下其没有被推演执行的状态;
3.5.将所述的缓存堆栈中的栈顶要互对应于变迁设置为执行同时将其属性值设计为已经推演执行;所述已经推演执行变迁对应的输入库所的令牌由此移动置于输出库所位置,所述待检测Petri构件实例的状态也进行更新,存储所述新的待检测Petri构件实例状态后,返回步骤3.3继续推演执行;
3.6.考察待检测Petri构件实例中是否还有没有推演执行的变迁,如果存在则表示存在线程冲突,同时提供所已经推演的所有成功执行的变迁,检测停止。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911404625.3A CN111124933A (zh) | 2019-12-30 | 2019-12-30 | 一种基于Petri构件的软件线程冲突检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911404625.3A CN111124933A (zh) | 2019-12-30 | 2019-12-30 | 一种基于Petri构件的软件线程冲突检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111124933A true CN111124933A (zh) | 2020-05-08 |
Family
ID=70505975
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911404625.3A Pending CN111124933A (zh) | 2019-12-30 | 2019-12-30 | 一种基于Petri构件的软件线程冲突检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111124933A (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461871A (zh) * | 2014-11-18 | 2015-03-25 | 合肥康捷信息科技有限公司 | 一种基于petri网的死锁检测方法 |
CN108241581A (zh) * | 2017-12-31 | 2018-07-03 | 廖赟 | 一种基于CPNTools的软件线程冲突检测方法 |
-
2019
- 2019-12-30 CN CN201911404625.3A patent/CN111124933A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461871A (zh) * | 2014-11-18 | 2015-03-25 | 合肥康捷信息科技有限公司 | 一种基于petri网的死锁检测方法 |
CN108241581A (zh) * | 2017-12-31 | 2018-07-03 | 廖赟 | 一种基于CPNTools的软件线程冲突检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9619430B2 (en) | Active non-volatile memory post-processing | |
Wang et al. | Coverage guided systematic concurrency testing | |
US7831542B2 (en) | Iterative search with data accumulation in a cognitive control framework | |
Artho et al. | Applying static analysis to large-scale, multi-threaded Java programs | |
US8185874B2 (en) | Automatic and systematic detection of race conditions and atomicity violations | |
CN104461871B (zh) | 一种基于petri网的死锁检测方法 | |
CN101777007B (zh) | 片上多核处理器的并行功能仿真系统及其方法 | |
CN102222015A (zh) | 检测多线程程序中的死锁的方法及系统 | |
CN103365776A (zh) | 基于确定性重放的并行系统弱一致性的验证方法和系统 | |
CN109635568B (zh) | 一种基于静态分析和模糊测试相结合的并发漏洞检测方法 | |
Atig et al. | Linear-time model-checking for multithreaded programs under scope-bounding | |
CN105183655A (zh) | 基于预测性分析的安卓应用程序数据竞争检测 | |
US20120059997A1 (en) | Apparatus and method for detecting data race | |
CN109885489B (zh) | 驱动程序中数据竞争检测方法及装置 | |
US8789060B1 (en) | Deterministic, parallel execution with overlapping regions | |
EP2341438A1 (en) | Coverage apparatus and method for testing multi-thread environment | |
CN111124694B (zh) | 一种基于petri网的可达图的死锁检测和解决方法 | |
CN111124933A (zh) | 一种基于Petri构件的软件线程冲突检测方法 | |
Tamitani et al. | An encoder/decoder chip set for the MPEG video standard | |
US9354890B1 (en) | Call stack structure for enabling execution of code outside of a subroutine and between call stack frames | |
CN108345505B (zh) | 一种多线程资源管理方法和系统 | |
Stetsenko et al. | Simulation of multithreaded algorithms using Petri-object models | |
Trainin et al. | Forcing small models of conditions on program interleaving for detection of concurrent bugs | |
CN111026776B (zh) | 关系型数据库中的查询方法及装置 | |
CN104145249A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20200508 |