CN112765036A - 一种针对并发程序数据竞争动态检测方法及系统 - Google Patents

一种针对并发程序数据竞争动态检测方法及系统 Download PDF

Info

Publication number
CN112765036A
CN112765036A CN202110118769.3A CN202110118769A CN112765036A CN 112765036 A CN112765036 A CN 112765036A CN 202110118769 A CN202110118769 A CN 202110118769A CN 112765036 A CN112765036 A CN 112765036A
Authority
CN
China
Prior art keywords
event
data
data competition
thread
detection
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
Application number
CN202110118769.3A
Other languages
English (en)
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.)
Beijing Minglue Zhaohui Technology Co Ltd
Original Assignee
Beijing Minglue Zhaohui Technology 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 Beijing Minglue Zhaohui Technology Co Ltd filed Critical Beijing Minglue Zhaohui Technology Co Ltd
Priority to CN202110118769.3A priority Critical patent/CN112765036A/zh
Publication of CN112765036A publication Critical patent/CN112765036A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种针对并发程序数据竞争动态检测方法及系统,在检测并发程序中的数据竞争缺陷时,使用了增加线程调度的方法,降低漏检;再对检测的结果进行验证,过滤错误的检测结果,保留真实的数据竞争检测结果,达到增加检测结果准确性的目的。

Description

一种针对并发程序数据竞争动态检测方法及系统
技术领域
本发明属于并发程序软件测试研究领域,具体涉及一种针对并发程序数据竞争动态检测方法及系统
背景技术
并发程序设计已成为现如今程序使用和设计的主流。并发程序在执行I/O操作时,线程处于阻塞状态,CPU切换至其他已就绪线程执行,不用像单线程模型一样一直等待I/O操作的结束,这种方式大大提升了CPU的利用率和程序整体执行效率。同时,并发程序的不同线程通过共享内存来达成临界区资源共享的目的。
然而,并发程序存在线程调度随机性和共享内存访问隐蔽性的问题,在执行时会受到不同程序影响。这些问题加大了程序员编写程序的难度,很容易导致程序存在缺陷,这种缺陷在执行时产生,导致程序出错,甚至是宕机奔溃。
并发程序的缺陷主要包括:数据竞争、死锁、原子性违背以及顺序违背。其中数据竞争缺陷对程序的危害最为严重,且具有隐蔽性较强,难以检测的特点,据研究,只要2-7%的数据竞争可被程序员直接通过源码发现。因此,对数据竞争缺陷的检测研究一直是热门且有价值的。
目前已经提出的数据竞争检测方法主要分为静态检测方法和动态检测方法两种。其中,静态数据竞争检测方法通过直接分析程序源代码的方式检测程序,而不真正执行程序。静态数据竞争检测工具RELAY,采用自底向上分析法,对程序内所有的锁集进行分析,再分析与线程相关的函数,最后判断读写访问操作是否产生数据竞争,同时该工具具有良好的可扩展性,可以检测百万代码级别的程序,如Linux系统内核源码。动态数据竞争检测方法在程序执行时跟踪程序读写访问操作和同步操作,获取相应的共享变量访问信息,并根据这些信息来检测存在数据竞争的访问内存操作。如基于lockset方法的动态检测技术,基本思想是通过维护锁集的方式,在进行共享变量的读写访问时,判断该访问是否被锁保护来检测数据竞争。基于lockset方法的动态检测工具Eraser,该工具的核心思想是通过监视程序的加锁、释放锁操作以及共享变量访问内存操作,分别给每个线程和共享变量维护一个锁集信息,当共享变量访问内存时,更新共享变量的锁集信息,若更新后锁集信息为空,则表示发生数据竞争。该工具支持的同步操作较少,因此会产生大量的误报。
静态检测直接分析源程序,检测速度快,但检测结果极其不准确,很难在生产环境中实际使用;动态检测是指程序边执行边进行检测分析,检测结果较为准确,但仍存在部分错误检测结果,且检测结果依赖线程调度,线程之间调度越少,检测结果的漏检越多,需要通过多次检测增加线程的调度,暴露出更多潜在的数据竞争,但是会大大增加程序运行的时间以及系统开销;基于动静结合的数据竞争检测方法,既有静态检测分析全部可疑数据竞争语句的能力,又有动态检测检测程序真实运行信息的准确性,首先通过静态检测方法分析出程序中可能存在的数据竞争访问,再通过动态检测方法进行动态检测,得到真实的数据竞争报告,但该方法需要先静态后动态,程序开销极大。
发明内容
针对上述技术问题,本发明对传统动态检测进行了改进,提供了一种针对并发程序数据竞争动态检测方法及系统,针对检测结果漏检多的问题,使用增加线程调度的方法;针对检测结果仍存在误检的问题,使用对检测结果进行验证的方法。
本发明解决上述技术问题的技术方案如下:
第一方面,本发明提供一种针对并发程序数据竞争动态检测方法,包括:
步骤1、通过第一动态插桩代码调用插桩运行环境提供的插桩接口,在所述并发程序执行时监控可能造成数据竞争缺陷的第一事件,并在所述第一事件前后插入第一分析代码和调度代码,通过所述第一分析代码获取所述第一事件的信息,通过所述调度代码干扰线程的调度,达到增加线程调度的目的;
步骤2、将所述可能造成数据竞争缺陷的第一事件作为输入,实现数据竞争检测算法,输出真正造成数据竞争缺陷的第二事件,生成数据竞争检测报告;
步骤3、通过第二动态插桩代码跟踪所述数据竞争检测报告中的造成数据竞争缺陷的第二事件,并在所述第二事件前后插入第二分析代码,通过所述第二分析代码获取所述第二事件的名称和所述第二事件当前所在的线程ID;
步骤4、将所述第二事件的名称和对应的线程ID作为输入,实现数据竞争验证算法,过滤所述数据竞争检测报告中不正确的第二事件,生成最终的数据竞争验证报告。
进一步,所述步骤2中实现数据竞争验证算法的具体流程包括:
步骤2.1、对所述并发程序中每个共享变量v,初始化它的锁集C(v)={Locki}程序中所有的锁,其中,Locki为第i个锁变量,i=0,1,…n,n为所述并发程序中锁变量的个数;
步骤2.2、对于每个线程t,均维护一个锁集L(t)表明当前线程获得的锁;
步骤2.3、边执行所述并发程序边进行插桩;
步骤2.4、判断当前所述并发程序是否在执行访问共享变量v操作,若是执行步骤2.5,否则执行步骤2.3;
步骤2.5、更新C(v)为当前共享变量v获得的锁与当前执行线程获得的锁的交集,即C(v)=C(v)∩L(t);
步骤2.6、判断C(v)是否为空集,即
Figure BDA0002921720020000041
若为空,执行步骤2.7,否则执行步骤2.3;
步骤2.7、报告数据竞争缺陷,返回步骤2.3;
重复上述步骤2.2-2.7,直至算法终止。
进一步,所述步骤2中生成数据竞争检测报告的具体流程包括:
将步骤1所述的第一动态插桩代码和步骤2所述的数据竞争检测算法以动态链接的形式链接到所述并发程序,运行所述并发程序实现动态检测并输出造成数据竞争缺陷的事件,生成数据竞争检测报告。
进一步,所述步骤4中的数据竞争验证算法的实现流程包括:
步骤4.1、持续跟踪所述并发程序中造成数据竞争缺陷的事件,为二元组<E1,E2>的形式,其中,E1和E2为构成数据竞争缺陷的两个事件;
步骤4.2、判断当前执行的线程中,是否有线程执行到事件E1,若有,执行步骤4.3,否则执行步骤4.1;
步骤4.3、将事件E1所在线程阻塞;
步骤4.4、从可执行线程中随机选择一个,继续执行;
步骤4.5、查看此时执行的线程是否是事件E2所属线程,若是,则执行步骤4.6,否则执行步骤4.4;
步骤4.6、若执行线程此时执行的事件是E2,说明<E1,E2>是造成数据竞争的事件,执行步骤4.7,否则执行步骤4.8;
步骤4.7、将<E1,E2>写入数据竞争验证报告;
步骤4.8、判断当前执行的E2所在线程是否阻塞,若是,执行步骤4.9,否则执行步骤4.4;
步骤4.9、唤醒E1所在的被阻塞线程;
重复执行上述步骤4.1-4.9,直到所述并发程序执行结束。
进一步,所述步骤4中生成数据竞争验证报告的具体流程包括:
将步骤3所述的第二动态插桩代码和步骤4所述的数据竞争验证算法以动态链接的形式链接到所述并发程序,运行所述并发程序,实现动态验证并输出真实的数据竞争验证报告。
第二方面,本发明提供一种针对并发程序数据竞争动态检测系统,包括:
第一动态插桩模块,用于通过第一动态插桩代码调用插桩运行环境提供的插桩接口,在所述并发程序执行时监控可能造成数据竞争缺陷的第一事件,并在所述第一事件前后插入第一分析代码和调度代码,通过所述第一分析代码获取所述第一事件的信息,通过所述调度代码干扰线程的调度,达到增加线程调度的目的;
数据竞争检测模块,用于将所述可能造成数据竞争缺陷的第一事件作为输入,实现数据竞争检测算法,输出真正造成数据竞争缺陷的第二事件,生成数据竞争检测报告;
第二动态插桩模块,用于通过第二动态插桩代码跟踪所述数据竞争检测报告中的造成数据竞争缺陷的第二事件,并在所述第二事件前后插入第二分析代码,通过所述第二分析代码获取所述第二事件的名称和所述第二事件当前所在的线程ID;
数据竞争验证模块,用于将所述第二事件的名称和对应的线程ID作为输入,实现数据竞争验证算法,过滤所述数据竞争检测报告中不正确的第二事件,生成最终的数据竞争验证报告。
进一步,所述数据竞争检测模块具体用于:
将所述第一动态插桩代码和所述数据竞争检测算法以动态链接的形式链接到所述并发程序,运行所述并发程序实现动态检测并输出造成数据竞争缺陷的事件,生成数据竞争检测报告。
进一步,所述数据竞争验证模块具体用于:
将所述第二动态插桩代码和所述数据竞争验证算法以动态链接的形式链接到所述并发程序,运行所述并发程序,实现动态验证并输出真实的数据竞争验证报告。
本发明的有益效果是:在检测程序数据竞争缺陷时,使用了增加线程调度的方法,降低漏检;再对检测的结果进行验证,过滤错误的检测结果,保留真实的数据竞争检测结果,达到增加检测结果准确性的目的。
附图说明
图1为本发明实施例提供的一种针对并发程序数据竞争缺陷动态检测系统的运行原理图;
图2为本发明实施例提供的数据竞争检测算法实现流程图;
图3为本发明实施例提供的数据竞争验证算法实现流程图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
本发明提供一种针对并发程序数据竞争动态检测方法及系统。能够降低检测结果的漏检率,并增加检测结果的准确性,保证并发程序设计的可靠性。
本发明实施例提供的一种针对并发程序数据竞争缺陷动态检测系统,包括:动态插桩模块一、数据竞争检测模块、动态插桩模块二、数据竞争验证模块。
本发明所针对的待检测程序是存在数据竞争缺陷的并发程序,它可以是二进制的可执行程序,而非源程序。
二进制插桩平台Pin是动态插桩工具,使用Pin,能够在程序执行时向程序中插入分析代码,通过执行这些分析代码获取程序运行过程中的一些特定行为信息,在本发明中用来对待测并发程序进行插桩。
插桩运行环境Pintool是Pin对外提供丰富的插桩调用接口供开发者使用并编译为动态链接库形式的插件。在本发明中作为实现动态插桩和数据竞争检测、验证的开发环境。
动态插桩模块一通过调用Pintool提供的插桩接口,在程序执行时监控可能造成数据竞争缺陷的事件,并在事件前后插入分析代码和调度代码,分析代码的功能是获取事件的信息,主要包括:共享内存访问事件、互斥锁事件、读写锁事件、信号量事件、线程事件。调度代码的功能是人为干扰线程的调度,达到增加线程调度的目的。
数据竞争检测模块用来将动态插桩模块获取的一系列可能造成数据竞争缺陷的事件作为输入,实现数据竞争检测算法,算法输出真正造成数据竞争缺陷的事件,生成数据竞争检测报告,并将算法的检测报告作为输入传给动态插桩模块二。
动态插桩模块二将数据竞争检测模块的检测报告作为输入,用来跟踪检测报告中的造成数据竞争缺陷的事件,并在事件前后插入分析代码,该分析代码的功能是获取造成缺陷的事件名称和事件当前所在的线程ID,作为数据竞争验证模块的输入。
数据竞争验证模块将动态插桩模块获取的事件名称和对应的线程ID作为输入,实现数据竞争验证算法,过滤不正确的检测结果,保留真实的造成数据竞争缺陷的事件。生成最终的数据竞争验证报告。
本发明提供的一种针对并发程序数据竞争动态检测方法及系统,使用了在动态检测过程中,增加程序线程调度的方法,降低漏检,并使用了数据竞争验证方法,对检测的结果进行验证,过滤错误的检测结果,保留真实的数据竞争检测结果,达到增加检测结果准确性的目的。
下面将结合附图对本发明的具体实施方式作进一步详细说明。
图1为本发明实施例提供的一种针对并发程序数据竞争缺陷动态检测系统的运行原理图,如图1所示,该系统的具体实施过程包括:
步骤1、在动态插桩模块一中实现动态插桩,具体插桩过程为:使用Pintool插件提供的API,跟踪程序中可能造成数据竞争缺陷的事件,在跟踪到的事件前后插入分析代码和调度代码,分析代码的功能是获取事件的信息,作为步骤2的输入。主要包括:共享内存访问事件、互斥锁事件、读写锁事件、信号量事件、线程ID。调度代码的功能是阻塞当前执行线程,迫使程序执行其他可执行线程,达到增加线程调度的目的,使用信号量sem_timedwait()来阻塞执行线程,信号量sem_post()来唤醒被阻塞的线程。
步骤2、将步骤1获取的可能造成数据竞争缺陷事件作为数据竞争检测模块输入,编写数据竞争检测算法,判断程序中是否发生数据竞争缺陷,若是,则输出造成数据竞争缺陷的语句。
数据竞争检测算法的算法思想为:在程序执行时,给程序中的每个共享变量v分配锁集C(v),令Lock为锁变量,C(v)初始化为{Locki},i=0,1,…n,n为程序中锁变量的个数。给程序中的每个线程t分配锁集locks_held(t),表示线程t当前获取的锁的集合,在线程t初始化时,locks_held(t)={}。当线程t访问共享变量v时,更新C(v)=C(v)∩locks_held(t);若C(v)={},则表示共享变量v没有被任何锁保护,访问v的操作将产生数据竞争。
图2示出了本发明数据竞争检测算法实现流程图,详述如下:
在S201中,对程序中每个共享变量v,初始化它的锁集C(v)={Locki}程序中所有的锁;
在S202中,对于每个线程t,都会维护一个锁集L(t)表明当前线程获得的锁;
在S203中,边执行程序边进行插桩;
在S204中,判断当前程序是否在执行访问共享变量v操作,若是执行步骤S205,否则执行步骤203;
在S205中,令C(v)为当前共享变量v获得的锁与当前执行线程获得的锁的交集,即C(v)=C(v)∩L(t);
在S206中,判断C(v)是否为空集,即
Figure BDA0002921720020000091
若为空,执行步骤S207,否则执行步骤S203;
在S207中,报告数据竞争缺陷,返回步骤S203;
重复上述步骤S202~S207,直至算法终止。
步骤3、将步骤1所述的动态插桩代码和步骤2所述的检测算法以动态链接的形式链接到待测二进制并发程序,运行程序实现动态检测并输出造成数据竞争缺陷的事件,生成数据竞争报告,该报告作为步骤4的输入。数据竞争报告为二元组形式的日志,记录导致数据竞争的两个访问事件在程序中的具体位置。如二元组<detect.cpp+11,insert.cpp+7>,表示detect.cpp的第11行事件和insert.cpp的第7行事件是对某个共享变量的并发访问,并产生了数据竞争。
步骤4、在动态插桩模块二中,根据Pintool提供的跟踪事件功能的接口PIN_GetSourceLocation(void*),将步骤3产生的数据竞争报告作为此API的参数输入,再次进行动态插桩,具体插桩过程为:跟踪造成数据竞争的事件,在事件前后插入分析代码,分析代码的功能是获取事件的信息以及事件所在线程ID,作为步骤5的输入。
步骤5、将步骤4获取的事件信息和线程ID作为数据竞争验证模块的输入,编写数据竞争验证算法,过滤不正确的缺陷事件,保留真实的缺陷事件。
算法具体实现如下:若程序有线程T1,T2;对于造成数据竞争缺陷的事件二元组<a,b>,如果线程T1首先到达事件a,加入人工干扰阻塞该线程;在线程T1被阻塞的时间里,线程T2执行到事件b,表明这是一个真实的数据竞争;若线程T2未执行到b就阻塞了,说明该数据竞争是一个误检。
图3示出了本发明实施例提供的数据竞争验证算法实现流程图,详述如下:
在S301中,动态插桩模块二持续跟踪执行程序中造成数据竞争缺陷的事件,为二元组<E1,E2>的形式(根据步骤3所述)
在S302中,判断当前执行的线程中,是否有线程执行到事件E1,若有,执行S303,否则执行S301;
在S303中,将当前E1所在线程阻塞;
在S304中,从可执行线程中随机选择一个,继续执行;
在S305中,查看此时执行的线程是否是E2所属线程,若是,则执行S306,否则执行S304;
在S306中,若执行线程此时执行的事件是E2,说明<E1,E2>是造成数据竞争的事件,执行S307,否则执行S308;
在S307中,将<E1,E2>写入数据竞争验证报告;
在S308中,判断当前执行的E2所在线程是否阻塞,若是,执行S309,否则执行S304;
在S309中,唤醒E1所在的被阻塞线程;
重复执行上述步骤S301-S309,直到程序执行结束。
步骤6、将步骤4所述的动态插桩代码和步骤5所述的验证算法以动态链接的形式链接到待测程序,运行程序,实现动态验证并输出真实的数据竞争验证报告。该报告记录形式与步骤3所述形式相同。
读者应理解,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述系统实施例中的模块和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (8)

1.一种针对并发程序数据竞争动态检测方法,其特征在于,包括:
步骤1、通过第一动态插桩代码调用插桩运行环境提供的插桩接口,在所述并发程序执行时监控可能造成数据竞争缺陷的第一事件,并在所述第一事件前后插入第一分析代码和调度代码,通过所述第一分析代码获取所述第一事件的信息,通过所述调度代码干扰线程的调度,达到增加线程调度的目的;
步骤2、将所述可能造成数据竞争缺陷的第一事件作为输入,实现数据竞争检测算法,输出真正造成数据竞争缺陷的第二事件,生成数据竞争检测报告;
步骤3、通过第二动态插桩代码跟踪所述数据竞争检测报告中的造成数据竞争缺陷的第二事件,并在所述第二事件前后插入第二分析代码,通过所述第二分析代码获取所述第二事件的名称和所述第二事件当前所在的线程ID;
步骤4、将所述第二事件的名称和对应的线程ID作为输入,实现数据竞争验证算法,过滤所述数据竞争检测报告中不正确的第二事件,生成最终的数据竞争验证报告。
2.根据权利要求1所述的方法,其特征在于,所述步骤2中实现数据竞争验证算法的具体流程包括:
步骤2.1、对所述并发程序中每个共享变量v,初始化它的锁集C(v)={Locki}程序中所有的锁,其中,Locki为第i个锁变量,i=0,1,…n,n为所述并发程序中锁变量的个数;
步骤2.2、对于每个线程t,均维护一个锁集L(t)表明当前线程获得的锁;
步骤2.3、边执行所述并发程序边进行插桩;
步骤2.4、判断当前所述并发程序是否在执行访问共享变量v操作,若是执行步骤2.5,否则执行步骤2.3;
步骤2.5、更新C(v)为当前共享变量v获得的锁与当前执行线程获得的锁的交集,即C(v)=C(v)∩L(t);
步骤2.6、判断C(v)是否为空集,即
Figure FDA0002921720010000021
若为空,执行步骤2.7,否则执行步骤2.3;
步骤2.7、报告数据竞争缺陷,返回步骤2.3;
重复上述步骤2.2-2.7,直至算法终止。
3.根据权利要求1所述的方法,其特征在于,所述步骤2中生成数据竞争检测报告的具体流程包括:
将步骤1所述的第一动态插桩代码和步骤2所述的数据竞争检测算法以动态链接的形式链接到所述并发程序,运行所述并发程序实现动态检测并输出造成数据竞争缺陷的事件,生成数据竞争检测报告。
4.根据权利要求1所述的方法,其特征在于,所述步骤4中的数据竞争验证算法的实现流程包括:
步骤4.1、持续跟踪所述并发程序中造成数据竞争缺陷的事件,为二元组<E1,E2>的形式,其中,E1和E2为构成数据竞争缺陷的两个事件;
步骤4.2、判断当前执行的线程中,是否有线程执行到事件E1,若有,执行步骤4.3,否则执行步骤4.1;
步骤4.3、将事件E1所在线程阻塞;
步骤4.4、从可执行线程中随机选择一个,继续执行;
步骤4.5、查看此时执行的线程是否是事件E2所属线程,若是,则执行步骤4.6,否则执行步骤4.4;
步骤4.6、若执行线程此时执行的事件是E2,说明<E1,E2>是造成数据竞争的事件,执行步骤4.7,否则执行步骤4.8;
步骤4.7、将<E1,E2>写入数据竞争验证报告;
步骤4.8、判断当前执行的E2所在线程是否阻塞,若是,执行步骤4.9,否则执行步骤4.4;
步骤4.9、唤醒E1所在的被阻塞线程;
重复执行上述步骤4.1-4.9,直到所述并发程序执行结束。
5.根据权利要求1所述的方法,其特征在于,所述步骤4中生成数据竞争验证报告的具体流程包括:
将步骤3所述的第二动态插桩代码和步骤4所述的数据竞争验证算法以动态链接的形式链接到所述并发程序,运行所述并发程序,实现动态验证并输出真实的数据竞争验证报告。
6.一种针对并发程序数据竞争动态检测系统,其特征在于,包括:
第一动态插桩模块,用于通过第一动态插桩代码调用插桩运行环境提供的插桩接口,在所述并发程序执行时监控可能造成数据竞争缺陷的第一事件,并在所述第一事件前后插入第一分析代码和调度代码,通过所述第一分析代码获取所述第一事件的信息,通过所述调度代码干扰线程的调度,达到增加线程调度的目的;
数据竞争检测模块,用于将所述可能造成数据竞争缺陷的第一事件作为输入,实现数据竞争检测算法,输出真正造成数据竞争缺陷的第二事件,生成数据竞争检测报告;
第二动态插桩模块,用于通过第二动态插桩代码跟踪所述数据竞争检测报告中的造成数据竞争缺陷的第二事件,并在所述第二事件前后插入第二分析代码,通过所述第二分析代码获取所述第二事件的名称和所述第二事件当前所在的线程ID;
数据竞争验证模块,用于将所述第二事件的名称和对应的线程ID作为输入,实现数据竞争验证算法,过滤所述数据竞争检测报告中不正确的第二事件,生成最终的数据竞争验证报告。
7.根据权利要求6所述的系统,其特征在于,所述数据竞争检测模块具体用于:
将所述第一动态插桩代码和所述数据竞争检测算法以动态链接的形式链接到所述并发程序,运行所述并发程序实现动态检测并输出造成数据竞争缺陷的事件,生成数据竞争检测报告。
8.根据权利要求6所述的系统,其特征在于,所述数据竞争验证模块具体用于:
将所述第二动态插桩代码和所述数据竞争验证算法以动态链接的形式链接到所述并发程序,运行所述并发程序,实现动态验证并输出真实的数据竞争验证报告。
CN202110118769.3A 2021-01-28 2021-01-28 一种针对并发程序数据竞争动态检测方法及系统 Pending CN112765036A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110118769.3A CN112765036A (zh) 2021-01-28 2021-01-28 一种针对并发程序数据竞争动态检测方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110118769.3A CN112765036A (zh) 2021-01-28 2021-01-28 一种针对并发程序数据竞争动态检测方法及系统

Publications (1)

Publication Number Publication Date
CN112765036A true CN112765036A (zh) 2021-05-07

Family

ID=75706429

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110118769.3A Pending CN112765036A (zh) 2021-01-28 2021-01-28 一种针对并发程序数据竞争动态检测方法及系统

Country Status (1)

Country Link
CN (1) CN112765036A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113407447A (zh) * 2021-06-15 2021-09-17 西安邮电大学 一种自适应轻量级动态混合数据竞争检测方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070245312A1 (en) * 2006-04-12 2007-10-18 Microsoft Corporation Precise data-race detection using locksets
US20080178156A1 (en) * 2007-01-24 2008-07-24 Nec Laboratories America, Inc. Fast and accurate static data-race detection for concurrent programs
CN110059014A (zh) * 2019-04-28 2019-07-26 西安邮电大学 一种并发程序数据竞争指令级定位方法
CN111222142A (zh) * 2020-01-09 2020-06-02 大连理工大学 一种车载obu的数据竞争检测方法
CN111563045A (zh) * 2020-05-11 2020-08-21 西安邮电大学 基于Adaboost模型的并发程序数据竞争语句级检测方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070245312A1 (en) * 2006-04-12 2007-10-18 Microsoft Corporation Precise data-race detection using locksets
US20080178156A1 (en) * 2007-01-24 2008-07-24 Nec Laboratories America, Inc. Fast and accurate static data-race detection for concurrent programs
CN110059014A (zh) * 2019-04-28 2019-07-26 西安邮电大学 一种并发程序数据竞争指令级定位方法
CN111222142A (zh) * 2020-01-09 2020-06-02 大连理工大学 一种车载obu的数据竞争检测方法
CN111563045A (zh) * 2020-05-11 2020-08-21 西安邮电大学 基于Adaboost模型的并发程序数据竞争语句级检测方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113407447A (zh) * 2021-06-15 2021-09-17 西安邮电大学 一种自适应轻量级动态混合数据竞争检测方法
CN113407447B (zh) * 2021-06-15 2022-09-27 西安邮电大学 一种自适应轻量级动态混合数据竞争检测方法

Similar Documents

Publication Publication Date Title
Huang Stateless model checking concurrent programs with maximal causality reduction
Sen Effective random testing of concurrent programs
Park et al. Randomized active atomicity violation detection in concurrent programs
US8141054B2 (en) Dynamic detection of atomic-set-serializability violations
US7752605B2 (en) Precise data-race detection using locksets
US10241894B2 (en) Data-scoped dynamic data race detection
CN110059014B (zh) 一种并发程序数据竞争指令级定位方法
Huang et al. GPredict: Generic predictive concurrency analysis
CN103365776A (zh) 基于确定性重放的并行系统弱一致性的验证方法和系统
US20080244332A1 (en) Machine instruction level race condition detection
US8141082B2 (en) Node-based representation of multi-threaded computing environment tasks, and node-based data race evaluation
CN114428733A (zh) 基于静态程序分析与模糊测试的内核数据竞争检测方法
CN110851353B (zh) 一种基于Delta Debugging与约束求解的并发程序缺陷定位方法
Letko et al. AtomRace: data race and atomicity violation detector and healer
Chiang et al. Formal analysis of GPU programs with atomics via conflict-directed delay-bounding
CN109885489B (zh) 驱动程序中数据竞争检测方法及装置
CN112765036A (zh) 一种针对并发程序数据竞争动态检测方法及系统
Sumner et al. Marathon: Detecting atomic-set serializability violations with conflict graphs
CN106844215B (zh) 一种基于约束求解的原子违背探测方法
Flanagan et al. The fasttrack2 race detector
Yang et al. Histlock+: precise memory access maintenance without lockset comparison for complete hybrid data race detection
Zheng et al. On performance debugging of unnecessary lock contentions on multicore processors: A replay-based approach
CN109522207B (zh) 一种基于约束求解的原子集合序列化违背探测方法
Jammer et al. Towards a hybrid MPI correctness benchmark suite
Qadeer et al. Runtime verification of concurrency-specific correctness criteria

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