利索能及
我要发布
收藏
专利号: 2021106594126
申请人: 西安邮电大学
专利类型:发明专利
专利状态:已下证
更新日期:2026-09-16
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.一种自适应轻量级动态混合数据竞争检测方法,其特征在于包括以下步骤:

步骤一:针对一个Java并发程序P,在不影响P动态执行过程中,动态数据竞争检测器为每个共享变量x分别维护两个长度为Q_LEN=6的读队列RCx和写队列WCx,RCx和WCx均采用先入先出原则以缓存机制存储各线程对x的读访问信息和写访问信息,访问信息以形式存放,用来表示线程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执行完毕,则输出数据竞争检测报告;否则,返回步骤二。