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

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

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

之前提到的动态数据竞争验证方法尽管相比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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
并行化的动态数据竞争验证和检测方法
之前系列提到的动态数据竞争验证和检测方法是结合了验证和检测两部分。这篇文章主要介绍一下并行化的动态数据竞争验证和检测方法。
chain
2018/06/12
9610
动态数据竞争验证方法(一)
动态数据竞争检测算法可以在不知道程序中是否存在数据竞争前提下执行,而动态数据竞争验证方法则是在知道程序中可能存在的数据竞争前提下,对这部分可疑的数据竞争进行验证,看这些数据竞争是否真的发生,同时也可以验证这些数据竞争是否对程序造成有害的影响。
chain
2018/06/12
7770
动态数据竞争检测方法实验分析(一)
之前的文章大致介绍了一下我们的动态数据竞争检测平台如何构建,这篇文章主要是在动态数据竞争检测平台上实现了之前介绍的数据竞争检测方法,我们扩展了其中的一些方法使得这些方法能够识别所有的Pthread库中的同步原语。
chain
2018/06/12
1.2K0
动态数据竞争检测方法实验分析(二)
上一篇文章主要分析了各个检测方法在检测能力上的优劣。这篇文章主要分析一下各个检测方法对程序造成的影响以及可扩展性。
chain
2018/06/12
7190
【计算机本科补全计划】指令:计算机的语言(MIPS) Part3
正文之前 今天学的很尴尬,因为有事情,而且新认识了两个计算机学院的保研大佬,不得不感叹我找的导师之强,第一个去上交的,是被金老师推荐去的,听说是跟了目前亚洲第一人的一个做计算机系统的人,例外一个小大佬居然也是直接跟的金老师。。也就是说我们以后是同门。 前面随便问问计算机学院的情况: 学长:我有个高中同学在金老师手下念博士生,我帮你问问。。。; 学姐:我有个大学同学在金老师实验室读研究生,我给你推荐好友哈。。。; 大佬:金老师是我的助班和学业导师,他人很好的。。。; 小大佬:金老师跟我说还不急着选方向,
用户1687088
2018/05/07
8610
【计算机本科补全计划】指令:计算机的语言(MIPS) Part3
进程同步概念简介 多线程上篇(四)
比如尽管有两个人去水井打水,但是水井却只有一个;合理安排的话刚好错开,但是如果安排不合理,那就会出现冲突,出现冲突怎么办?总有一个先来后到,等下就好了。
noteless
2019/03/04
1.5K0
分布式超大规模数据的实时快速排序算法
引言 对数据进行处理的同学,经常会遇到排序需求,无论是内存数据还是磁盘数据。 对于单点的数据,我们的处理比较简单,比如: select field_a from table_b order by fi
美的让人心动
2018/06/14
2.6K0
Java的字符串常量相关的一个问题
大家过年好!春节假期休了一个长假,今天刚回来。在知乎上遇到了一个很好的问题,忍不住回答了一下。原文转载过来了。 以下代码的运行结果,如何解释? String h = new String("hw"); String h2 = h.intern(); String h1 = "hw"; System.out.println(h == h1);//false System.out.println(h2 == h1);//true System.out.println(h2 == h);//false Stri
海纳
2018/03/02
9100
一文带你读懂JDK源码:JVM提供的5种锁优化
高效并发是从JDK1.5到1.6的一个重要改进,HotSpot团队用了大量的精力进行锁优化技术,适应性锁(Adaptive Spinnig)、锁消除(Lock Elimination)、锁粗化(Lock Coarsening)、轻量级锁(Lightweight Locking)和偏向锁(Biased Locking)。
后台技术汇
2022/05/28
3710
一文带你读懂JDK源码:JVM提供的5种锁优化
【并发缺陷】data race数据竞争、atomicity violation原子违背、order violation顺序违背
三类均是跟共享变量的内存访问有关的缺陷。 对于并发缺陷的分类目前国内许多是分死锁、数据竞争、原子违背、顺序违背。
全栈程序员站长
2022/11/17
7720
【并发缺陷】data race数据竞争、atomicity violation原子违背、order violation顺序违背
MySQL InnoDB Cluster 详解
这篇文章将详细地介绍MySQL的高可用解决方案—— MySQL InnoDB Cluster。
MySQLSE
2020/09/28
2.4K0
MySQL InnoDB Cluster 详解
序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)
经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。快速导航链接如下:
Loudrs
2023/05/11
5.5K0
序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)
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
8450
Uber 如何实现 Go 代码中的动态数据竞争检测
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. 交错字符串
给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。
用户7447819
2022/03/04
2270
LeetCode 97. 交错字符串
【动态规划算法练习】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
1530
【动态规划算法练习】day14
【算法专题】动态规划综合篇
题目:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。
YoungMLet
2024/03/01
1300
【算法专题】动态规划综合篇
【Java】:学习笔记(易错小结)
这篇博客意旨大家对于 java 没有注意到的小点,给大家补充一些内容,增加 对 java 的理解
IsLand1314
2024/11/19
1070
【Java】:学习笔记(易错小结)
☆打卡算法☆LeetCode 97、交错字符串 算法解析
链接:97. 交错字符串 - 力扣(LeetCode) (leetcode-cn.com)
恬静的小魔龙
2022/08/07
2830
☆打卡算法☆LeetCode 97、交错字符串  算法解析
用于追踪认知任务期间的亚秒级脑动态的高密度脑电
这项工作为社区提供了高密度脑电图(HD-EEG, 256个通道)数据集,这些数据集是在无任务和任务相关范式下收集的。它包括43名健康的参与者执行视觉命名和拼写任务,视觉和听觉命名任务和视觉工作记忆任务,以及静息状态。HD-EEG数据以脑成像数据结构(bid)格式提供。这些数据集可以用来(i)追踪大脑网络动力学和在不同条件下(命名/拼写/其他)的次秒级时间尺度,和模态(听觉、视觉)的快速重新配置和相互比较,(ii)验证几个方法中包含的参数,这些方法是用来通过头皮脑电图估计大脑皮层网络,例如最优通道数量和感兴趣区域数量的问题,以及(iii)允许到目前为止使用HD-EEG获得的结果的再现性。我们希望,这些数据集的发布将推动新方法的发展,可以用来评估大脑皮层网络,并更好地了解大脑在休息和工作时的一般功能。 数据可从https://openneuro.org免费获取。 1.1.背景和概要 新的证据表明,来自于空间上遥远的大脑区域之间的通信导致大脑功能(失能)。尽管在过去的几十年里,功能性磁共振成像已经给神经科学带来了革命性的变化,但其固有的时间分辨率较差,这是限制其用于跟踪快速大脑网络动态的主要缺陷,而这种网络动态是多个大脑(认知和感知运动)过程执行的基础。脑电图/脑磁图(EEG/MEG)是一种独特的非侵入性技术,能够在毫秒的时间尺度上跟踪大脑动态。 在无任务范式和任务相关范式下,已经有一些研究使用脑电图/脑磁图源连通性方法来跟踪大脑皮层网络。然而,尽管人类连接组项目(HCP)和几个脑电图数据集的MEG数据集模型得到了人们的称赞,但只有很少的数据可以同时用于休息和任务,并且在不同任务中开放获取的高密度脑电图(HD-EEG, 256个通道)数据仍然缺失。 HD-EEG与复杂的信号处理算法相结合,正日益将EEG转变为一种潜在的神经成像模式。最近的脑电图研究揭示了在休息和认知任务期间跟踪快速功能连接动态的可能性。此外,一些研究报告了HD-EEG数据(与低脑电通道密度相比)在某些病理条件下的潜在应用,如癫痫网络的定位和神经退行性疾病中认知功能下降的检测。此外,新出现的证据表明,在一定程度上,使用HD-EEG可以捕获皮层下的结构。在这种背景下,无任务和任务相关的可用性开放HD-EEG数据库正在快速成为强制性的(i)解读(次秒级)重组的脑功能网络在认知,(ii)开发新的信号处理方法,充分估计大脑皮层网络和(iii)允许使用HD-EEG到目前为止结果的再现性。 在此,我们提供了第一个开放获取的HD-EEG(256通道)数据集,在休息状态和4种不同的任务(视觉命名、听觉命名、视觉拼写和工作记忆)下记录。部分数据已经被用于开发和分析各种信号处理方法。 特别地,我们的努力集中在对休息和图片命名期间的脑功能网络的估计上。然而,这些研究都没有描述数据集的细节,而且到目前为止的工作只用了小部分数据。在这项工作中,我们提供了所有必要的细节和一个开放的数据库,以便国际科学界能够在无任务和与任务相关的范式中自由地产生对大脑功能的更好的理解。这也将有助于新方法的开发,以提高目前使用的HD-EEG评估皮质脑网络的技术的准确性,并通过比较结果和未来的meta分析来使得这些技术互相面对。我们希望这个数据集将有助于使脑电图源空间网络分析成为一种成熟的技术,以解决认知和临床神经科学中的一些问题。 1.2 方法 1.2.1 数据采集 数据是2012年至2017年在法国雷恩进行的两项不同实验中收集的。第一数据集包括视觉对象名字的命名和拼写(图1)。第二个数据集包括静息状态、视觉/听觉命名和视觉工作记忆任务(图2)。同样的设备中使用的数据集和录音都在同一个地方(雷恩大学医院中心)。采用HD-EEG系统(EGI,256个电极)以1 KHz采样率记录脑活动,电极阻抗保持在50 k ω以下。两项研究的参与者是不同的。他们提供了参与的书面知情同意,并完成了一些纳入/排除标准问卷(总结见表1)。参与者坐在法拉第结构房间的扶手椅上。房间由百叶窗减弱的自然光照亮。我们的参与者的头大约位于屏幕前1米。图像以白色背景上的黑色图画的形式集中呈现,没有任何尺寸修改(10厘米x 10厘米)。这种设置对应于从注视点的最大靠近度2.86度的视角,从而使整个图像处于参与者的中心凹视野内。声音通过50瓦的罗技扬声器显示,没有任何音频隔离的可能性。
悦影科技
2021/05/01
6510
用于追踪认知任务期间的亚秒级脑动态的高密度脑电
推荐阅读
相关推荐
并行化的动态数据竞争验证和检测方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档