Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >动态数据竞争验证方法(二)

动态数据竞争验证方法(二)

原创
作者头像
chain
发布于 2018-06-12 14:29:18
发布于 2018-06-12 14:29:18
4710
举报

之前提到的动态数据竞争验证方法尽管相比RaceFuzzer提高了验证的效率,但是仍然存在一个比较致命的问题就是执行程序一次只能够验证很少的一部分数据竞争。

  • 图(a)中存在两个数据竞争[S1,S3]和[S2,S4],S1在S2之前执行,S3在S4之前执行,因此如果对这两个数据竞争进行验证,那么都能够被验证成为数据竞争。
  • 图(b)中同样也是存在两个数据竞争[S1,S4]和[S2,S3],S1在S2之前执行,S3在S4之前执行,因此这两个数据竞争之间存在相互干扰。当线程T1阻塞并被中止在S1时,线程T2也会被阻塞中止在S3。此时就必须随机唤醒其中一个线程,如果T1被唤醒继续执行,那么最终只有[S2,S3]会被验证成功,[S1,S4]就被遗漏了;如果T2被唤醒继续执行,那么最终只有[S1,S4]会被验证成功,[S2,S3]就被遗漏了。
  • 图(c)中存在两个数据竞争[S1,S2]和[S1,S3],S2在S3之前执行,这两个数据竞争有相同的一个竞争语句,因此也存在相互干扰。当[S1,S2]被验证为数据竞争之后,如果随机选择线程T1继续执行,那么最终[S1,S3]就会被遗漏。 事实上,程序中存在的数据竞争绝大部分都是相互干扰的,有些是类似于上图中简单的干扰,有些则是依赖于输入或是控制条件存在的比较复杂的干扰。如果仅仅使用前面提到的动态数据竞争验证方法那么就会有大量的漏报。 为了能够找到在验证过程中遗漏的数据竞争,我们提出了一种简单的动态数据竞争验证和检测方法。该方法的核心就是在动态数据竞争验证之后,利用比较精确地动态数据竞争检测方法找到被遗漏的数据竞争。

我们可以完全在之前提出的动态数据竞争验证的方法框架上加入动态数据竞争检测,根据前面的文章对于动态数据竞争检测方法进行的实验分析,我们选择ML作为动态数据竞争检测方法。这样的话,如果在验证过程中被遗漏的数据竞争,就会通过ML进行数据竞争检测。ML作为比较精确地动态数据竞争检测器,因此基本不会遗漏数据竞争。 本质上,动态数据竞争验证和检测方法是利用动态数据竞争验证来改变线程调度触发一些隐藏的数据竞争条件,验证一部分数据竞争,而对于不能验证的数据竞争或是遗漏的数据竞争,则交给动态数据竞争检测来分析。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
分布式超大规模数据的实时快速排序算法
引言 对数据进行处理的同学,经常会遇到排序需求,无论是内存数据还是磁盘数据。 对于单点的数据,我们的处理比较简单,比如: select field_a from table_b order by fi
美的让人心动
2018/06/14
2.6K0
【并发缺陷】data race数据竞争、atomicity violation原子违背、order violation顺序违背
三类均是跟共享变量的内存访问有关的缺陷。 对于并发缺陷的分类目前国内许多是分死锁、数据竞争、原子违背、顺序违背。
全栈程序员站长
2022/11/17
7420
【并发缺陷】data race数据竞争、atomicity violation原子违背、order violation顺序违背
XTU 程序设计Python实训三
任务1 字符串拼接 依次输入两个字符串赋值给s1和s2,并将s1中所有英文字母转换为大写后连接到s2后面,并将拼接的结果赋值给s3,输出s3的值。 提示:应用“+”运算和字符串的upper()方法。 任务2 根据字符串的长度确定字符串输出重复次数 输入一个字符串赋值给s4,根据s4的长度来确定将s3重复多少次,重复运算结果赋值给s5,并输出s5的值。例如:输入“A1”, 如果s3的值是123XTU,则输出123XTU123XTU。 提示:求字符串的长度用内置函数len(),重复运算用“*” 任务3 访问字符串以及子字符串 输入一个长度为2字符串赋值s6,判定s6在s5的第2至第11个字符(包含第11个字符)之间首次出现的位置与出现次数,若s5的长度小于10,则表示从第2个字符到字符串末尾的子串。例如:输入“XT”,若s5的值是123XTU123XTU,则输出“2 2”,第2个到第11字符的子串是23XTU123XT:表示:“XT”在子串“23XTU123XT”中首次出现的起始位置是2,总共出现了2次。 提示:本任务中需要用到字符串的切片运算:[m:n],出现位置与次数分别使用序列类型的共有方法:index()和count() 任务4 字符串的替换 输入一个字符串赋值给s8,将s5中所有的数字符号”2”替换成存储在s8中的字符串,并将替换结果赋值给s9,输出s9的值。例如:输入一个字符串“TO”,s5是123XTU123XTU,则输出替换后的结果为:1TO3XTU1TO3XTU。 提示:本任务中需要用到字符串的方法:replace() 任务5 字符串反转 将任务4中替换结果s9反转,输出s9反转后的值。例如:s9中存储的是:1TO3XTU1TO3XTU,则输出的反转结果是:UTX3OT1UTX3OT1 提示:本任务中需要用到字符串的切片运算:[::-1]
用户7886150
2020/11/20
1.1K0
☆打卡算法☆LeetCode 97、交错字符串 算法解析
链接:97. 交错字符串 - 力扣(LeetCode) (leetcode-cn.com)
恬静的小魔龙
2022/08/07
2710
☆打卡算法☆LeetCode 97、交错字符串  算法解析
C++中map和set的使用
set的介绍 C++中的set是一个STL容器,它是一个自动排序的集合(即将数据存入set,我们通过迭代器顺序访问出来时,数据是有序的),内部使用红黑树(后面会讲解)来实现。它的特点是不允许重复元素,而且插入元素时自动进行排序。
初阶牛
2024/01/28
2790
C++中map和set的使用
并行化的动态数据竞争验证和检测方法
之前系列提到的动态数据竞争验证和检测方法是结合了验证和检测两部分。这篇文章主要介绍一下并行化的动态数据竞争验证和检测方法。
chain
2018/06/12
9130
java基础(十一):多线程
注意:优先级低只是意味着获得调度的概率低。并不是绝对先调用优先级高后调用优先级低的线程。
Vincent-yuan
2020/06/16
3800
python3(元组,列表,集合,字典)
1.列表 1)创建列表 数组:存储同一种数据类型的集合 scores=[12,13,14] 列表:(打了激素的数组):可以存储任意数据类型的集合
py3study
2020/01/12
8160
Java 并发核心机制
Java 的 java.util.concurrent 包(简称 J.U.C)中提供了大量并发工具类,是 Java 并发能力的主要体现(注意,不是全部,有部分并发能力的支持在其他包中)。从功能上,大致可以分为:
静默虚空
2020/01/02
4760
Java多线程第三篇-多线程的代码相关案例
举例:如果线程1和线程2在执行,线程1和线程2是否为空,都为空,进入,但是注意这里第一个if条件进去是上锁的,这时候我们的线程2就需要进行等待线程1释放,当释放完成后,线程2进入if条件,这时候instance已经不为空了,这时候直接释放返回结果。
如烟花般绚烂却又稍纵即逝
2024/12/26
770
Java多线程第三篇-多线程的代码相关案例
动态数据竞争验证方法(一)
动态数据竞争检测算法可以在不知道程序中是否存在数据竞争前提下执行,而动态数据竞争验证方法则是在知道程序中可能存在的数据竞争前提下,对这部分可疑的数据竞争进行验证,看这些数据竞争是否真的发生,同时也可以验证这些数据竞争是否对程序造成有害的影响。
chain
2018/06/12
7530
MySQL InnoDB Cluster 详解
这篇文章将详细地介绍MySQL的高可用解决方案—— MySQL InnoDB Cluster。
MySQLSE
2020/09/28
2.3K0
MySQL InnoDB Cluster 详解
动态数据竞争检测方法实验分析(一)
之前的文章大致介绍了一下我们的动态数据竞争检测平台如何构建,这篇文章主要是在动态数据竞争检测平台上实现了之前介绍的数据竞争检测方法,我们扩展了其中的一些方法使得这些方法能够识别所有的Pthread库中的同步原语。
chain
2018/06/12
1.1K0
多线程基础
例子:单核CUP执行两件事,串行执行时间快,还是多线程执行快? 答:串行执行快。因为单核,执行的总时间一样,而多线程增加了线程切换的时间。
冬天vs不冷
2025/01/20
820
多线程基础
Uber 如何实现 Go 代码中的动态数据竞争检测
作者 | Uber Engineering 译者 | Sambodhi 策划 | 赵钰莹 本文是 Uber 在 Go 代码中数据竞争经验两篇文章中的第一篇。详细版本将在 2022 年 ACM SIGPLAN 编程语言设计与实现(Programming Languages Design and Implementation,PLDI)中发表。在本文系列的第二部分,我们将介绍关于 Go 中竞争模式的学习。 Uber 已将 Go 作为主要编程语言,广泛用于开发微服务。我们的 Go 单体仓库由大约 5
深度学习与Python
2023/03/29
8190
Uber 如何实现 Go 代码中的动态数据竞争检测
一文带你读懂JDK源码:JVM提供的5种锁优化
高效并发是从JDK1.5到1.6的一个重要改进,HotSpot团队用了大量的精力进行锁优化技术,适应性锁(Adaptive Spinnig)、锁消除(Lock Elimination)、锁粗化(Lock Coarsening)、轻量级锁(Lightweight Locking)和偏向锁(Biased Locking)。
后台技术汇
2022/05/28
3590
一文带你读懂JDK源码:JVM提供的5种锁优化
面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决
死锁(Deadlock)是指两个或两个以上的线程(或进程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去,此时称系统处于死锁状态或系统产生了死锁。
寻求出路的程序媛
2024/11/10
2580
面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决
【Java】:学习笔记(易错小结)
这篇博客意旨大家对于 java 没有注意到的小点,给大家补充一些内容,增加 对 java 的理解
IsLand1314
2024/11/19
950
【Java】:学习笔记(易错小结)
动态数据竞争检测方法实验分析(二)
上一篇文章主要分析了各个检测方法在检测能力上的优劣。这篇文章主要分析一下各个检测方法对程序造成的影响以及可扩展性。
chain
2018/06/12
7040
【动态规划算法练习】day14
97. 交错字符串 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: s = s1 + s2 + … + sn t = t1 + t2 + … + tm |n - m| <= 1 交错 是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1 + s1 + t2 + s2 + t3 + s3 + … 注意:a + b 意味着字符串 a 和 b 连接。
摘星
2023/10/15
1480
【动态规划算法练习】day14
相关推荐
分布式超大规模数据的实时快速排序算法
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文