【并发缺陷】data race数据竞争、atomicity violation原子违背、order violation顺序违背

【并发缺陷】data race数据竞争、atomicity violation原子违背、order violation顺序违背三类均是跟共享变量的内存访问有关的缺陷。对于并发缺陷的分类目前国内许多是分死锁、数据竞争、原子违背、顺序违背。或者在并发缺陷中又细分concurrencyvulnerability:死锁和数据竞争。感觉各个作者有自己的分类方法????以下引用的中文解释来自<并发缺陷暴露、检测与规避研究综述>哈工大的苏小红老师实验室发表在2015年计算机学报上目前找到外文文献分为7类。其他四类…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

三类均是跟共享变量的内存访问有关的缺陷。
对于并发缺陷的分类目前国内许多是分死锁、数据竞争、原子违背、顺序违背。
在这里插入图片描述或者在并发缺陷中又细分 concurrency vulnerability :死锁和数据竞争。
感觉各个作者有自己的分类方法?

以下引用的中文解释来自<并发缺陷暴露、检测与规避研究综述>哈工大的苏小红老师实验室发表在2015年计算机学报上

目前找到外文文献分为7类。其他四类是我上篇说的死锁(Deadlock)、活锁(LiveLock)、饥饿(Starvation)、挂起(Suspension)

data race数据竞争

race condition竞用条件:

  1. 并发线程在同一个内存地址上操作
  2. 其中至少一个是写操作
  3. 内存没有使用同步机制

注意:满足竞用条件时,不一定产生数据竞争。
Data race occurs when at least two threads access the same memory location , with at least one of them writing data to that location and these accesses are not protected by locks
谷歌翻译: 当至少两个线程访问同一内存位置时发生数据争用,其中至少一个线程将数据写入该位置,并且这些访问不受锁的保护
中文解释: 对某一共享内存单元,存在来自不同线程的两个并发访问,且至少一个为写访问.并发意指这两个访问之间没有happens-before关系,存在“同时”发生的可能.

happens-before:
Chapter 17 of the Java Language Specification defines the happens-before relation on memory operations such as reads and writes of shared variables. The results of a write by one thread are guaranteed to be visible to a read by another thread only if the write operation happens-before the read operation. The synchronized and volatile constructs, as well as the Thread.start() and Thread.join() methods, can form happens-before relationships.

atomicity violation原子违背

Atomicity violation occurs when the execution of two code blocks(sequences of statements protected by locks) in one thread is concurrency overlapping with the execution of one or more code blocks of other threads ,in such a way that the resulting content of memory cannot be achieved by executing the involved blocks in any non-overlapping order.
谷歌翻译: 当一个线程中的两个代码块(受锁保护的语句序列)的执行与其他线程的一个或多个代码块的执行并发重叠时,就会发生原子性冲突,以这样一种方式,使得不能通过以任何非重叠的顺序执行代码块来实现所得到的存储器内容。
中文解释: 对某一为保证正确性必须原子性执行的指令序列,存在一个执行交错,其执行效果不与任何该指令序列原子性执行时的执行交错的效果相同.

单变量的四种原子性违背的例子
【并发缺陷】data race数据竞争、atomicity violation原子违背、order violation顺序违背
T1两次读值不一致;T2写的值被覆盖; T1读值不一致 ; T2读到了中间值

在这里插入图片描述
解释:正确顺序L1-L2-L3 判断缓冲区剩余是否够,不够就加,之后写入。错误顺序L1-L3-L2使得缓冲区还未扩容便填充,造成缓冲区溢出。
在这里插入图片描述
解释:指针指向proc_info后,再写入数据,S3造成空指针异常NPD

order violation顺序违背

Order violation occurs when the expected order of at least two memory accesses is not respected, i.e., the programmer’s intended order of execution is not enforced. 两个存储访问的顺序违反
谷歌翻译: 如果不遵守至少两次内存访问的预期顺序,即不执行程序员的预期执行顺序,则会发生顺序冲突。
中文解释: 顺序违背.某一指令(组)没有按照预期,总是在另一指令(组)之前或者之后执行.
消除顺序违背的措施一般是使用条件变量在指令(组)之间形成固定的执行次序.
在这里插入图片描述
解释:thread1初始化io_pending S4必须在S2之后执行
在这里插入图片描述
解释:需要先初始化在操作,造成Use before init缺陷

三者区别

data race order violation atomicity violation
至少一个线程在等待状态
至少一个线程执行状态
所有线程都在执行态
产生错误、或非预期结果
至少一个线程持有锁
不同的线程访共享内存
至少一个内存访问操作是写
内存访问没有同步机制保护
在内存访问中,至少有一个正确的执行顺序没有被保证
序列需要被原子执行
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223086.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 取当前时间年月日_Java获取当前时间年月日的方法[通俗易懂]

    java 取当前时间年月日_Java获取当前时间年月日的方法[通俗易懂]本文实例为大家分享了java获取当前时间年月日的具体代码,供大家参考,具体内容如下importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;publicclassDateTest{publicstaticvoidmai…

    2025年9月7日
    6
  • mt4多账户_sem怎么搭建账户

    mt4多账户_sem怎么搭建账户PAM/man系统通常适用于基金/外汇领域。技术部署于manage后台、MT4/MT5白标、主标皆可适用。PAMMM系统以跟单社区的模式,设置好主账号,类似于followme、信号源会发出一定的信号,跟随者按照指定的逻辑程序,占有比例去实时跟进,并且得到一个结果。PAM系统可以有IB形式、比例分层、返佣计算等一个综合后台。…

    2025年8月29日
    6
  • 安全日志审计系统服务器,日志审计服务器「建议收藏」

    安全日志审计系统服务器,日志审计服务器「建议收藏」日志审计服务器内容精选换一换本地使用远程桌面连接登录Windowsserver2012云服务器,报错:122.112…,服务器频繁掉线,Windows登录进程意外中断。系统资源不足或不可用。服务启动失败。通过VNC方式登录云服务器。单击打开服务管理,选择“管理工具>事件查看器>Windows日志>系统>筛选当前日志”。事件查看器在“事件级别”负载均…

    2022年6月4日
    106
  • centos解压命令

    centos解压命令-c:建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的:-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出参数-f是必须的-f:使用档案名…

    2022年5月16日
    34
  • 屏幕真伪测试软件,如何检测电视屏幕真伪4K、坏点漏光?两款工具一键识别!…

    各种互联网项目,新手可操作,几乎都是0门槛现在的智能电视屏幕越大越薄,且许多品牌的电视都打着4K屏幕的旗号,但你真的买对电视了吗?对于大屏智能电视来说,屏幕真的很重要,在购买应该需要确认电视屏幕无坏点漏光现象,非伪4K电视屏。今天当贝市场小编分享的这两款工具,能一键识别电视屏幕真伪4K,是否有坏点漏光等现象。1、屏幕大师屏幕大师专为智能电视及网路机顶盒设备成为,提供了包含颜色、坏点、文字、图片等…

    2022年4月17日
    112
  • junit mock 方法(need的用法总结)

    使用EasyMock的总体步骤1、生成Mock接口IServicemockService=EasyMock.createMock(“name”,IService.class);如果要mock对象,而不是接口,应该使用classextension:org.easymock.classextension.EasyMock如果要mock多个接口,最好使用Mo

    2022年4月12日
    470

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号