CN110059014B - 一种并发程序数据竞争指令级定位方法 - Google Patents

一种并发程序数据竞争指令级定位方法 Download PDF

Info

Publication number
CN110059014B
CN110059014B CN201910347395.5A CN201910347395A CN110059014B CN 110059014 B CN110059014 B CN 110059014B CN 201910347395 A CN201910347395 A CN 201910347395A CN 110059014 B CN110059014 B CN 110059014B
Authority
CN
China
Prior art keywords
instruction
thread
concurrent program
data competition
num
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
Application number
CN201910347395.5A
Other languages
English (en)
Other versions
CN110059014A (zh
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.)
Xian University of Posts and Telecommunications
Original Assignee
Xian University of Posts and Telecommunications
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 Xian University of Posts and Telecommunications filed Critical Xian University of Posts and Telecommunications
Priority to CN201910347395.5A priority Critical patent/CN110059014B/zh
Publication of CN110059014A publication Critical patent/CN110059014A/zh
Application granted granted Critical
Publication of CN110059014B publication Critical patent/CN110059014B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/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)
  • Test And Diagnosis Of Digital Computers (AREA)
  • Complex Calculations (AREA)

Abstract

针对并发程序数据竞争定位问题,公开了一种并发程序数据竞争指令级定位方法,属于软件测试技术领域。本方法首先利用数据竞争定义对并发程序动态二进制插桩过程中所得的指令信息进行数据竞争初步检测,同时为每条线程设置向量时钟来跟踪并记录线程访问共享内存的时间;然后通过happens‑before规则判断各条指令所在线程的向量时钟是否存在偏序关系来判断是否发生数据竞争,形成最终数据竞争定位报告。本发明提供了一种并发程序数据竞争指令级定位方法,并有效降低了检测误报率及漏报率,用于提高并发程序测试的精度及效率。

Description

一种并发程序数据竞争指令级定位方法
技术领域
本发明属于软件测试技术领域,具体涉及到并发程序测试中数据竞争精确定位问题,提供了一种动态跟踪程序每条指令并遍历所有指令对来定位数据竞争的方法,主要解决在并发程序测试中如何检测发生数据竞争的指令所在位置的问题,提高软件测试精度及测试效率。
背景技术
在大数据时代,软件规模与数据量日益增长,计算机多核硬件也飞速发展,多线程并发程序带来的缺陷也很快蔓延开来,由于多线程程序内在的并发性和不确定性,这些缺陷难以检测、调试和修复,这些问题给并发程序的分析带来了巨大的挑战,软件的开发与维护人员需要耗费大量的时间和精力来检测、定位和修复这些问题。
数据竞争是多线程程序中常见的并发错误,它们中的许多可能会导致程序结果发生错误,更为严重地并发错误会直接导致程序和服务器崩溃,数据竞争不一定导致程序错误,因为有些程序员故意让程序有数据竞争以提高运行的效率,但是调查表明5%-24%的数据竞争会对程序产生坏影响。
目前,国内外已经提出了很多数据竞争检测和验证的方法,主要分为3类:静态数据竞争检测方法,动态数据竞争检测方法以及动静结合的数据竞争检测方法。1997年,Savage等人提出基于lockset的动态数据竞争检测方法Eraser,该方法在程序执行过程中维护每个线程当前的锁集信息,同时更新共享变量持有的锁集信息,当共享变量不再受到锁保护的时候,报告出数据竞争。Dinning、Mellor-Crummey和Perkovic等人于1990-1996年先后基于Lamport的happens-before关系提出了使用逻辑时钟来动态地检测数据竞争。Pozniansky(Djit+)、Flanagan(FastTrack)、Cai(Loft)以及Ok-Kyoon等人于2003年至2015年先后提出了改进后的基于happens-before关系的动态数据竞争检测方法。2016年,ZhenYang、Zhen Yu等人采用了动静结合的分析方法来检测数据竞争。2017年,Yu Guo、Yan Cai、Zijiang Yang等人提出基于抽样算法的数据竞争检测方法。
以上方法虽然能降低一定的误检及漏检并且能降低测试开销,但都只是在语句层次进行检测,无法实现对数据竞争指令对进行定位,为此,本发明以数据竞争定义和happens-before规则为基础,提出了一种指令级动态插桩并分析指令对的并发程序数据竞争定位方法,有助于并发程序数据竞争的精准定位。
发明内容
本发明主要解决的问题:现有的检测方法无法实现对并发程序数据竞争指令对进行定位,本发明将被测并发程序进行动态指令级插桩,以数据竞争定义和happens-before规则为基础,遍历所有指令对来分析是否发生数据竞争,为该问题提供一种精确并有效的数据竞争指令级定位方法。
本发明的技术方案:一种并发程序数据竞争指令级定位方法,其特征包括以下步骤:(1)设被测并发程序P的指令数为inscount,线程数为n,利用英特尔公司推出的二进制插桩工具PIN3.4对被测并发程序P中每条访问内存地址的指令进行动态插桩,指定每条指令的编号num,第一条运行指令的num为1,记录每条指令的指令地址ip、访问内存地址addr、读写操作op、所在线程编号tid以及对应的源码行号line;
(2)针对被测并发程序P中某个被访问的共享内存S,创建向量时钟矩阵
Figure BDA0002042794400000021
其中
Figure BDA0002042794400000022
表示线程1的向量时钟,以此类推,
Figure BDA0002042794400000023
表示线程n的向量时钟,第i个线程的向量时钟
Figure BDA0002042794400000024
tij(j=1,2,...,n)表示线程i所记录的线程j访问共享内存S的时间,初始值设为0;
(3)判断条件num=inscount,若该条件成立,进入步骤(9),否则每运行一条指令,其指令编号num=num+1,遍历当前指令INS与之前的所有指令,设置k初始值为1,若线程i中的指令访问共享内存S,则增加自己的时间戳tii=tii+1,当线程i与线程j同步运行时,线程i释放共享内存S后线程j开始访问共享内存S,线程j更新自己向量时钟中的tjj=tjj+1,并且同时将两个线程向量时钟的值更新为:
Figure BDA0002042794400000025
即此时两个向量时钟中每个维度的较大值;
若线程i与线程j不同步时,线程j更新自己向量时钟中的tjj=tjj+1,其它值不变,若被测程序运行过程中出现新的共享内存G,则创建新的向量时钟矩阵VGn×n,并设置初始值为0;
(4)判断k是否等于当前指令的编号num,如果等于,跳回步骤(3),若不等于,进入步骤(5);
(5)若当前指令INS的读写操作op为读操作,进入步骤(6),若为写操作,进入步骤(7);
(6)如果第k条指令的读写操作op为读操作,则k=k+1,跳回步骤(4);若第k条指令的读写操作为写操作,进入步骤(7);
(7)若当前指令与第k条指令的访问内存地址addr一致并且两者所在线程tid不同,进入步骤(8),否则k=k+1,跳回步骤(4);
(8)设当前指令所在线程为e(e=1,2,...,n),第k条指令所在线程为q(q=1,2,...,n),判断线程e的向量时钟
Figure BDA0002042794400000031
与线程q的向量时钟
Figure BDA0002042794400000032
是否存在偏序关系,若存在,令k=k+1并跳回步骤(4),否则报告数据竞争,输出当前指令与第k条指令的num、指令地址ip与其对应的源码行号line,然后令k=k+1,跳回步骤(4);
(9)程序动态运行结束,输出数据竞争报告。
附图说明
图1为本发明的流程图。
图2为实施方式中实例测试并发程序datarace_true代码。
图3为实施方式中实例测试并发程序datarace_true初步动态插桩结果。
图4为并发程序datarace_true中共享变量global的向量时钟矩阵更新情况。
图5为实施方式中实例测试并发程序datarace_true数据竞争定位结果。
具体实施方式
以下结合实例具体说明本发明的数据竞争定位方法的实施方式,但本发明的实施不限于此,本实验的实验环境为:操作系统Ubuntul16.04,插桩工具:英特尔公司动态插桩工具PIN,版本号为3.4。
如图1所示,一种并发程序数据竞争指令级定位方法包括以下步骤:
在图2所示的实例代码datarace_true中,主线程对共享变量global进行了一次读操作,子线程thrd1与子线程thrd2分别对共享变量global进行了一次写操作,而子线程thrd3对共享变量global进行了一次读操作,因为主线程与三条子线程的所有操作都不受任何锁保护,所以它们不存在同步运行关系,主线程和子线程thrd3中对共享变量global的读访问都可能与子线程thrd1或thrd2中对共享变量的写访问构成数据竞争,并且子线程thrd1与子线程thrd2中对共享变量的写访问也可能会造成数据竞争,由此可见,主线程中对共享变量global的读访问与子线程thrd1和thrd2中对共享变量global的写访问分别会构成一次潜在的数据竞争,子线程thrd3分别会与thrd1和thrd2构成一次潜在的数据竞争,并且子线程thrd1与thrd2也会构成一次潜在的数据竞争,该并发程序实例的真实数据竞争一共为5次。
(1)对并发程序datarace_true进行动态插桩。
利用动态插桩工具PIN3.4,针对图2所示的实例并发程序datarace_true进行指令级动态插桩,为便于后续分析,剔除所有无对应源码的指令(注:一个程序中,不是所有指令都有对应的源码,并且绝大多数指令没有对应的源码),生成了如图3所示的插桩结果,该并发程序的指令数inscount为39,共享变量global的内存地址memaddress为0x60105c。
其中,num表示指令编号,insaddress表示指令所在地址,op为该指令对内存的读写操作(’R’表示读操作,’W’表示写操作),memaddress表示为指令所访问的内存地址,tid为指令所在的线程ID,主线程的tid为0,子线程thrd1的tid为1,thrd2的tid为2,thrd3的tid为3,line表示该指令所对应的源码行号。
(2)创建向量时钟矩阵Q对共享变量global进行跟踪。
在并发程序datarace_true中,一共有四条线程对共享变量global进行访问,所以创建一个4行4列的矩阵Q4×4对共享变量global进行跟踪,初始值设为
Figure BDA0002042794400000041
其中第一行表示主线程的向量时钟
Figure BDA0002042794400000042
第二行表示子线程thrd1的向量时钟
Figure BDA0002042794400000043
以此类推,第四行表示子线程thrd3的向量时钟
Figure BDA0002042794400000044
元素t11表示主线程记录自身访问共享内存global的时间戳,元素t12为主线程记录子线程thrd1访问共享内存global的时间戳,元素t21表示子线程thrd1记录主线程访问共享内存global的时间戳,元素t22为子线程thrd1记录自身访问共享内存global的时间戳。
(3)遍历当前指令与之前所有指令形成的指令对。
在动态插桩的过程中,每运行一条指令,遍历当前指令与之前所有指令形成的指令对,如图3中,当并发程序datarace_true运行到第20条指令时,遍历之前的19条指令与之形成的指令对(20,1)、(20,2)....(20,19),设置k的初始值为1,若主线程的指令访问了共享内存global,则增加主线程自身的时间戳t11=t11+1,若主线程与子线程thrd1同步运行且当主线程释放共享内存global后子线程开始访问共享内存global,子线程thrd1增加自己的时间戳t22=t22+1,并同时将主线程和子线程的向量时钟的值更新为此时两个向量时钟中每个维度的较大值,如下所示:
Figure BDA0002042794400000051
若主线程与子线程不同步运行且当主线程释放共享内存global后子线程开始访问共享内存global,则子线程增加自己的时间戳t22=t22+1,其他值不变。
同理,并发程序datarace_true中任何线程对共享内存global进行访问后,其向量时钟都以上述方式进行更新。
(4)判断终止条件。
判断条件num=inscount,若该条件成立,程序动态插桩结束,输出数据竞争报告,否则判断k是否等于当前指令的编号num,如果等于,说明当前指令之前的所有指令已经遍历完成,跳回步骤(3),若不等于,进入步骤(5);
(5)判断当前指令的读写操作。
若当前指令INS的读写操作op为读操作,进入步骤(6),若为写操作,忽略步骤(6)进入步骤(7);
(6)判断第k条指令的读写操作。
如果第k条指令的读写操作op为读操作,根据数据竞争定义,构成数据竞争的两条指令至少有一条为写操作,而当前指令与第k条指令都为读操作,不可能造成数据竞争,如图4中的第26条指令与第34条指令,它们的读写操作都为’R’,所以不存在数据竞争,k=k+1,跳回步骤(4);若第k条指令的读写操作为写操作,进入步骤(7);
(7)初步判断数据竞争。
若当前指令与第k条指令的访问内存地址addr一致并且两者所在线程tid不同,初步报告数据竞争,虽然这时当前指令与第k条指令访问一个共享内存,来自不同线程且至少有一条为写操作,但两条指令不一定会同时访问,因为在某些锁保护的情况下,两条指令的访问顺序有着明确的先后关系,如此就不会造成数据竞争,所以进入步骤(8)进一步判断两条指令访问共享内存是否存在明确的先后关系;若当前指令与第k条指令的访问内存地址addr不一致或者两者所在线程tid相同,则k=k+1,跳回步骤(4);
(8)利用happens-before规则判断各个线程向量时钟是否存在偏序关系。
设当前指令所在线程为e(e=1,2,3,4),第k条指令所在线程为q(q=1,2,3,4),判断线程e的向量时钟
Figure BDA0002042794400000061
与线程q的向量时钟
Figure BDA0002042794400000062
是否存在偏序关系,若存在,则令k=k+1并跳回步骤(4),否则报告数据竞争,输出当前指令与第k条指令的num、指令地址ip与其对应的源码行号line,然后令k=k+1,跳回步骤(4);
由图3可知,当并发程序datarace_true运行到第19条指令时(num=19),子线程thrd1对共享内存global进行了第一次访问(由于子线程thrd1是对内存进行写访问,其对应的写操作指令的前一条指令必为读指令,所以第18条指令可忽略,以下出现类似情况不再进行解释),所以更新其向量时钟中元素t22=t22+1,向量时钟更新为
Figure BDA0002042794400000063
向量时钟矩阵更新为
Figure BDA0002042794400000064
当并发程序运行到第23条指令时(num=23),子线程thrd2对共享内存global进行了第二次访问,更新其向量时钟中的元素t33=t33+1,向量时钟更新为
Figure BDA0002042794400000065
由于子线程thrd2访问的共享内存global是由子线程thrd1释放,但两者并不存在同步关系,所以其它值不变,此时向量时钟矩阵为
Figure BDA0002042794400000066
第23条指令与第19条指令初步判断为数据竞争(num=23,k=19),判断两条指令所在线程thrd1与thrd2的向量时钟是否存在偏序关系,综上所诉,
Figure BDA0002042794400000067
Figure BDA0002042794400000068
并不存在偏序关系,报告数据竞争,输出两条指令的指令编号num 19和23,指令地址insaddress4196408和4196445,指令所对应的源码行号line 45和65;
当当前指令num=26且k=19时,子线程thrd3对共享变量进行了第三次访问,首先更新其向量时钟中元素t44=t44+1,向量时钟更新为
Figure BDA0002042794400000071
由图3可知,第26条指令与第19条指令初步判断为数据竞争,子线程thrd3访问的共享内存global是由子线程thrd1释放,但两者并不存在同步关系,所以其它值不变,向量时钟矩阵为
Figure BDA0002042794400000072
此时两条指令所在线程的向量时钟
Figure BDA0002042794400000073
Figure BDA0002042794400000074
并不存在偏序关系,所以报告数据竞争,输出两条指令的指令编号num 19和26,指令地址insaddress4196408和4196477,指令所对应的源码行号line 45和87;
当当前指令num依然为26且k=23时,当前指令没有发生变化,程序没有对共享变量global进行访问,所以向量时钟矩阵不需要更新,此时两条指令被初步判断为数据竞争,但它们所在线程的向量时钟
Figure BDA0002042794400000075
Figure BDA0002042794400000076
并不存在偏序关系,所以报告数据竞争,输出两条指令的指令编号num 23和26,指令地址insaddress 4196445和4196477,指令所对应的源码行号line 65和87;
当当前指令num=34且k=19时,主线程对共享变量进行了第四次访问,首先更新其向量时钟中元素t11=t11+1,向量时钟更新为
Figure BDA0002042794400000077
由图3可知,第34条指令与第19条指令初步判断为数据竞争,主线程访问的共享内存global是由子线程thrd3释放,但两者并不存在同步关系,所以其它值不变,向量时钟矩阵为
Figure BDA0002042794400000078
此时两条指令所在线程的向量时钟
Figure BDA0002042794400000079
Figure BDA00020427944000000710
并不存在偏序关系,报告数据竞争,输出两条指令的指令编号num 19和34,指令地址insaddress4196408和4196330,指令所对应的源码行号line 45和30;
当当前指令num=34且k=23时,当前指令没有发生变化,并发程序没有对共享变量global进行访问,所以向量时钟矩阵不需要更新,此时两条指令被初步判断为数据竞争,但它们所在线程的向量时钟
Figure BDA00020427944000000711
Figure BDA00020427944000000712
并不存在偏序关系,所以报告数据竞争,输出两条指令的指令编号num 23和34,指令地址insaddress 4196445和4196330,指令所对应的源码行号line 65和30;
所以在并发程序datarace_true动态插桩过程中,共享内存global的向量时钟矩阵更新情况为图4所示。
综上所述,针对并发程序datarace_true,本方法检测出来5对可能造成数据竞争的指令对,分别为第19条与第23条、第19条与第26条、第23条与第26条、第19条与第34条、第23条与第34条,检测漏报为0,检测误报为0,具体检测结果如表1所示,其中racewith表示与之构成数据竞争的指令的指令编号num,图5为并发程序datarace_true数据竞争定位结果图。
此外,通过表2中从github上选取的10个多线程案例分析结果可得,本文所提出的方法INSRaceTest优于现有的三种动态数据竞争检测方法。其中,HB表示基于happens-before规则的检测方法,HY表示基于happens-before和lockset的混合方法,racecount为各个方法检测出来的数据竞争数量,FP为误报数量,FN为漏报数量,FPR表示误报率,FNR表示漏报率。这10个案例真实数据竞争数量为240,INSRaceTest检测出248对数据竞争,其中误报数量为8,漏报数量为0,误报率和漏报率分别为3.33%和0,相对于其他三种现有的动态检测方法,INSRaceTest的误报率FPR以及漏报率FNR明显较低。由此可知,本文所提出的方法较准确的定位出并发程序数据竞争指令对所在位置,验证了该并发程序数据竞争定位方法的有效性,提高了并发软件测试的精度及测试效率。
表1本文方法检测结果
Figure BDA0002042794400000081
表2各方法检测结果
Figure BDA0002042794400000091

Claims (2)

1.一种并发程序数据竞争指令级定位方法,其特征包括以下步骤:
(1)设被测并发程序P的指令数为inscount,线程数为n,利用二进制插桩工具PIN3.4对被测并发程序P中每条访问内存地址的指令进行动态插桩,指令的编号为num,第一条访问内存地址指令的num为1,后续指令依次类推,记录每条指令的指令地址ip、访问内存地址addr、读写操作op、所在线程编号tid以及对应的源码行号line;
(2)针对被测并发程序P中某个被访问的共享内存S,创建向量时钟矩阵
Figure FDA0002042794390000011
其中
Figure FDA0002042794390000012
表示线程1的向量时钟,依此类推,
Figure FDA0002042794390000013
表示线程n的向量时钟,第i个线程的向量时钟
Figure FDA0002042794390000014
tij(j=1,2,...,n)表示线程i所记录的线程j访问共享内存S的时间,初始值设为0;
(3)判断条件num=inscount,若该条件成立,进入步骤(9),否则每运行一条指令,其指令编号num=num+1,遍历当前指令INS与之前的所有指令,设置k初始值为1,若线程i中的指令访问共享内存S,则增加自己的时间戳tii=tii+1,当线程i与线程j同步运行时,线程i释放共享内存S后线程j开始访问共享内存S,线程j更新自己向量时钟中的tjj=tjj+1,并且同时将两个线程向量时钟的值更新为:
Figure FDA0002042794390000015
即此时两个向量时钟中每个维度的较大值;
若线程i与线程j不同步时,线程j更新自己向量时钟中的tjj=tjj+1,其它值不变,若被测程序运行过程中出现新的共享内存G,则创建新的向量时钟矩阵VGn×n,并设置初始值为0;
(4)判断k是否等于当前指令的编号num,如果等于,跳回步骤(3),若不等于,进入步骤(5);
(5)若当前指令INS的读写操作op为读操作,进入步骤(6),若为写操作,进入步骤(7);
(6)如果第k条指令的读写操作op为读操作,则k=k+1,跳回步骤(4);若第k条指令的读写操作为写操作,进入步骤(7);
(7)若当前指令与第k条指令的访问内存地址addr一致并且两者所在线程tid不同,进入步骤(8),否则k=k+1,跳回步骤(4);
(8)设当前指令所在线程为e(e=1,2,...,n),第k条指令所在线程为q(q=1,2,...,n),判断线程e的向量时钟
Figure FDA0002042794390000021
与线程q的向量时钟
Figure FDA0002042794390000022
是否存在偏序关系,若存在,令k=k+1并跳回步骤(4),否则报告数据竞争,输出当前指令与第k条指令的num、指令地址ip与其对应的源码行号line,然后令k=k+1,跳回步骤(4);
(9)被测程序动态执行结束,输出数据竞争报告。
2.根据权利要求1所述的一种并发程序数据竞争指令级定位方法,其特征在于:该方法能用于并发程序数据竞争指令级定位,可以定位到并发程序数据竞争发生的指令对和语句对,并能有效的降低数据竞争检测误报率及漏报率。
CN201910347395.5A 2019-04-28 2019-04-28 一种并发程序数据竞争指令级定位方法 Active CN110059014B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910347395.5A CN110059014B (zh) 2019-04-28 2019-04-28 一种并发程序数据竞争指令级定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910347395.5A CN110059014B (zh) 2019-04-28 2019-04-28 一种并发程序数据竞争指令级定位方法

Publications (2)

Publication Number Publication Date
CN110059014A CN110059014A (zh) 2019-07-26
CN110059014B true CN110059014B (zh) 2022-09-27

Family

ID=67321241

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910347395.5A Active CN110059014B (zh) 2019-04-28 2019-04-28 一种并发程序数据竞争指令级定位方法

Country Status (1)

Country Link
CN (1) CN110059014B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111222142B (zh) * 2020-01-09 2022-11-18 大连理工大学 一种车载obu的数据竞争检测方法
CN111563045B (zh) * 2020-05-11 2022-11-01 西安邮电大学 基于Adaboost模型的并发程序数据竞争语句级检测方法
CN112765036A (zh) * 2021-01-28 2021-05-07 北京明略昭辉科技有限公司 一种针对并发程序数据竞争动态检测方法及系统
CN113407447B (zh) * 2021-06-15 2022-09-27 西安邮电大学 一种自适应轻量级动态混合数据竞争检测方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1677353A (zh) * 2004-03-24 2005-10-05 微软公司 用于检测多线程程序中潜在竞争的方法和系统
CN102073589A (zh) * 2010-12-29 2011-05-25 北京邮电大学 一种基于代码静态分析的数据竞争检测方法及系统
CN103488563A (zh) * 2013-09-05 2014-01-01 龙芯中科技术有限公司 并行程序的数据竞争检测方法、装置及多核处理系统
CN103729291A (zh) * 2013-12-23 2014-04-16 华中科技大学 一种基于同步关系的并行动态数据竞争检测系统
CN104077144A (zh) * 2014-07-07 2014-10-01 西安交通大学 基于多线程程序约束构建的数据竞争检测与证据生成方法
CN105117369A (zh) * 2015-08-04 2015-12-02 复旦大学 一种基于异构平台的多种并行错误检测体系架构
CN106598845A (zh) * 2016-11-18 2017-04-26 华中科技大学 一种基于块偏序的动态数据竞争检测方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160364315A1 (en) * 2015-06-12 2016-12-15 Arizona Board Of Regents On Behalf Of Arizona State University Fast data race detection for multicore systems

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1677353A (zh) * 2004-03-24 2005-10-05 微软公司 用于检测多线程程序中潜在竞争的方法和系统
CN102073589A (zh) * 2010-12-29 2011-05-25 北京邮电大学 一种基于代码静态分析的数据竞争检测方法及系统
CN103488563A (zh) * 2013-09-05 2014-01-01 龙芯中科技术有限公司 并行程序的数据竞争检测方法、装置及多核处理系统
CN103729291A (zh) * 2013-12-23 2014-04-16 华中科技大学 一种基于同步关系的并行动态数据竞争检测系统
CN104077144A (zh) * 2014-07-07 2014-10-01 西安交通大学 基于多线程程序约束构建的数据竞争检测与证据生成方法
CN105117369A (zh) * 2015-08-04 2015-12-02 复旦大学 一种基于异构平台的多种并行错误检测体系架构
CN106598845A (zh) * 2016-11-18 2017-04-26 华中科技大学 一种基于块偏序的动态数据竞争检测方法及系统

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
SimpleLock: Fast and Accurate Hybrid Data Race Detector;Misun Yu;《SimpleLock: Fast and Accurate Hybrid Data Race Detector》;20140922;50-55 *
一种基于发生序和锁集的BPEL数据竞争静态检测方法;李少东等;《计算机与数字工程》;20100820(第08期);全文 *
基于可行序的数据竞争检测;李磊等;《高技术通讯》;20140715(第07期);全文 *
多线程并发程序数据竞争修复方法的研究;张晓萱等;《数字技术与应用》;20190325(第03期);全文 *
多线程程序数据竞争检测和验证方法研究综述!;禹振等;《智能计算机与应用》;20170628(第03期);全文 *

Also Published As

Publication number Publication date
CN110059014A (zh) 2019-07-26

Similar Documents

Publication Publication Date Title
CN110059014B (zh) 一种并发程序数据竞争指令级定位方法
Park et al. Falcon: fault localization in concurrent programs
Park et al. CTrigger: exposing atomicity violation bugs from their hiding places
Huang et al. LEAP: Lightweight deterministic multi-processor replay of concurrent Java programs
Lu et al. AVIO: detecting atomicity violations via access interleaving invariants
US7698690B2 (en) Identifying code that wastes time performing redundant computation
Lu et al. Finding atomicity-violation bugs through unserializable interleaving testing
US8141082B2 (en) Node-based representation of multi-threaded computing environment tasks, and node-based data race evaluation
US8392891B2 (en) Technique for finding relaxed memory model vulnerabilities
US20160188441A1 (en) Testing multi-threaded applications
CN111563045A (zh) 基于Adaboost模型的并发程序数据竞争语句级检测方法
CN114428733A (zh) 基于静态程序分析与模糊测试的内核数据竞争检测方法
CN110851353B (zh) 一种基于Delta Debugging与约束求解的并发程序缺陷定位方法
CN106844215B (zh) 一种基于约束求解的原子违背探测方法
CN107077350A (zh) 用于在第一存储器中跟踪对象的方法和装置
Koca et al. Spectrum-based fault localization for diagnosing concurrency faults
CN108021495B (zh) 基于回放的代码调试方法
CN109522207B (zh) 一种基于约束求解的原子集合序列化违背探测方法
Tzoref et al. Instrumenting where it hurts: an automatic concurrent debugging technique
Lu et al. Detecting concurrency bugs from the perspectives of synchronization intentions
Yu et al. Experimental performance comparison of dynamic data race detection techniques
CN112765036A (zh) 一种针对并发程序数据竞争动态检测方法及系统
CN111858361B (zh) 一种基于预测和并行验证策略的原子性违例缺陷检测方法
Long et al. Checking linearizability with fine-grained traces
Bo et al. Performance Evaluation of Data Race Detection Based on Thread Sharing Analysis With Different Granularities: An Empirical Study

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