[发明专利]一种自适应轻量级动态混合数据竞争检测方法有效
申请号: | 202110659412.6 | 申请日: | 2021-06-15 |
公开(公告)号: | CN113407447B | 公开(公告)日: | 2022-09-27 |
发明(设计)人: | 孙家泽;杨彦漫;舒新峰 | 申请(专利权)人: | 西安邮电大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 710061 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 自适应 轻量级 动态 混合 数据 竞争 检测 方法 | ||
本发明针对并发程序动态数据竞争检测问题,公开了一种自适应轻量级动态混合数据竞争检测方法,属于并发程序测试领域。该方法首先过滤掉线程本地数据访问和只读数据访问,进而只分析共享内存位置,然后为每个共享内存维护两个历史访问信息读写队列,针对读操作采用自适应轻量级表示方法,当共享内存为读并发状态时切换为向量时钟记录访问信息,否则只记录最后一次访问信息,使用Happpens‑before关系和LockSet算法检测数据竞争。本发明提供了一种自适应轻量级动态混合数据竞争检测方法,有助于提高数据竞争检测准确性,降低检测代价。
技术领域
本发明属于软件测试技术领域,具体涉及到并发程序数据竞争检测问题,提出了一种自适应轻量级动态混合数据竞争检测方法。
背景技术
多线程程序在现代程序设计中无处不在,因其可以显著提高系统计算效率、性能等优点得到了广泛的应用,但是由于线程交错执行使得许多并发缺陷难以发现,可能会导致并发程序运行结果正确性或者直接导致系统崩溃。并发程序缺陷检测在并发程序研究中有着重要地位,尤其数据竞争问题在常见的并发缺陷中占比较大,因此如何准确高效地检测数据竞争缺陷,成为提高多线程程序可靠性和安全性急需解决的问题。
为了尽可能多检测数据竞争错误,国内外众多学者致力于数据竞争动态检测技术研究,在不影响程序运行结果正确性情况下以期能够以低检测开销方式尽可能多的检测出数据竞争。动态数据竞争缺陷检测技术主要通过收集被测程序动态执行过程中的相关访问信息,进而判断哪些访问操作构成数据竞争,但是由于线程调度具有不确定性,导致收集到的相关信息不完整,存在漏报和误报情况且该技术会消耗大量内存资源。为此本发明提出了一种自适应轻量级动态混合数据竞争检测方法,该方法以低执行开销高覆盖率的方式准确有效地检测数据竞争。
发明内容
动态数据竞争检测技术,其一主要是将收集到的各线程对共享变量的读写访问信息利用Happens-berfore去验证是否存在并发访问,其二主要是利用锁信息去验证共享变量在访问过程中是否受到锁保护,其三是综合利用这两种方法去检测数据竞争。在使用动态数据竞争检测过程中,目标是使检测准确度尽可能提高,而检测时间和内存开销尽可能降低。
本发明为一种自适应轻量级动态混合数据竞争检测方法,如图1所示,该方法的特征包括以下步骤:
步骤一:针对一个Java并发程序P,在不影响P动态执行过程中,动态数据竞争检测器为每个共享变量x分别维护两个长度为Q_LEN=6的读队列RCx和写队列WCx,RCx和WCx均采用先入先出原则以缓存机制存储各线程对x的读访问信息和写访问信息,访问信息以epoch,LockSet形式存放,用来表示线程t的线程编号、访问时间戳和当前线程所持有的锁集合,其中epoch表示为t@c,意为线程t的当前时间戳为c;
步骤二:当线程t对x进行访问,判断当前是否为读访问,如果不为读访问则进入步骤五;否则首先判断当前x是否已经处于读共享状态,如果是读共享状态则更新读向量时钟Rx为线程t的时钟向量VCt;否则去判断t当前读访问与RCx最后一个元素存放的读访问是否构成并发访问状态,如果是则动态数据竞争检测器自动切换为读向量时钟Rx来记录读访问历史,进入步骤三;
步骤三:遍历并分析WCx中线程u对x的历史访问信息直到最后一个元素,即如果WCx[u]中线程u的时间戳与当前线程t的时间戳VCt[u]不满足Happens-before关系,且t目前获得的锁集与WCx[u].LockSet交集为空集,则报告写-读类型数据竞争错误,进入步骤四;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安邮电大学,未经西安邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110659412.6/2.html,转载请声明来源钻瓜专利网。