[发明专利]一种自适应轻量级动态混合数据竞争检测方法有效
申请号: | 202110659412.6 | 申请日: | 2021-06-15 |
公开(公告)号: | CN113407447B | 公开(公告)日: | 2022-09-27 |
发明(设计)人: | 孙家泽;杨彦漫;舒新峰 | 申请(专利权)人: | 西安邮电大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 710061 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 自适应 轻量级 动态 混合 数据 竞争 检测 方法 | ||
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交集为空集,则报告写-读类型数据竞争错误,进入步骤四;
步骤四:判断RCx最后一个元素的epoch值与t的epoch值是否相等,如果相等则更新最后一个元素的LockSet集合;否则判断是否为满队,如果是满队状态则删除队首元素并将当前的访问信息加入到RCx中,否则直接将当前访问信息加入到RCx;
步骤五:线程t对x进行访问,判断当前是否为写访问,如果不为写访问则返回步骤二,否则遍历并分析WCx中线程u对x的历史访问信息直到最后一个元素,即如果WCx[u]中线程u的时间戳与当前线程t的时间戳VCt[u]不满足Happens-before关系,且t目前获得的锁集与WCx[u].LockSet交集为空集,则报告写-写类型数据竞争错误,进入步骤六;
步骤六:判断x当前是否处于读共享状态,如果处于读共享状态则判断读向量时钟Rx与当前线程t是否满足Happens-before关系,如果满足则报读-写类型数据竞争错误并删除Rx,否则进入步骤七;
步骤七:遍历并分析RCx中线程u对x的历史访问信息直到最后一个元素,即如果RCx[u]中线程u的时间戳与当前线程t的时间戳VCt[u]不满足Happens-before关系,且t目前获得的锁集与RCx[u].LockSet交集为空集,则报告读-写类型数据竞争错误,进入步骤八;
步骤八:判断WCx最后一个元素的epoch值与t的epoch值是否相等,如果相等则更新最后一个元素的LockSet集合;否则判断是否为满队,如果是满队状态则删除队首元素并将当前的访问信息加入到WCx中,否则直接将当前访问信息加入到RCx;
步骤九:判断终止条件,程序P是否执行完毕,如果P执行完毕,则输出数据竞争检测报告;否则,返回步骤二。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安邮电大学,未经西安邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110659412.6/1.html,转载请声明来源钻瓜专利网。