一、Race Condition(竞争条件、竞态条件、资源竞争 )

1. 竞争(Race)

计算机运行过程中,

  • 并发、
  • 无序、
  • 大量

的进程在使用

  • 有限、
  • 独占、
  • 不可抢占

的资源,由于进程无限,资源有限,产生矛盾,这种矛盾称为竞争(Race)。

2. 竞争条件(Race Condition)

由于两个或者多个进程竞争使用不能被同时访问的资源,计算的正确性取决于多个线程的交替执行时序时,就会发生竞争条件(Race Condition)。

3. 竞争条件分为两类:

-Mutex(互斥):

两个或多个进程彼此之间没有内在的制约关系,但是由于要抢占使用某个临界资源(不能被多个进程同时使用的资源,如打印机,变量)而产生制约关系。

-Synchronization(同步):

两个或多个进程彼此之间存在内在的制约关系(前一个进程执行完,其他的进程才能执行),如严格轮转法。

二、临界区(Critical Region)

  • 一段访问临界资源的代码。
  • 为了避免出现竞争条件,进入临界区要遵循四条原则:
    • 任何两个进程不能同时进入访问同一临界资源的临界区
    • 进程的个数,CPU个数性能等都是无序的,随机的
    • 临界区之外的进程不得阻塞其他进程进入临界区
    • 任何进程都不应被长期阻塞在临界区之外

三、解决互斥方法:

Busy Waiting(忙等待):

等着但是不停的检查测试,不睡觉,知道能进行为止

Sleep and Wakeup(睡眠与唤醒):

引入Semapgore(信号量,包含整数和等待队列,为进程睡觉而设置),唤醒由其他进程引发。

四、解决互斥的方法:

• 禁用中断 Disabling interrupts
• 锁变量 Lock variables (no)
• 严格轮转 Strict alternation (no)
• Peterson’s solution (yes)
• The TSL instruction (yes)
最重要的方法:信号量(Semaphore)

Java多线程模型当中,经常会因为多个线程同时访问相同的共享数据,而造成数据的不一致性。

为了解决这个问题,通常来说需要加上同步标志“synchronized”,来保证数据的串行访问。但是“synchronized”是个性能杀手,过多的使用会导致性能下降,特别是扩展性下降,使得你的系统不能使用多个CPU资源。

https://blog.csdn.net/u012562273/article/details/56486776/

https://blog.csdn.net/u012767369/article/details/86648561

Race Condition是什么相关推荐

  1. java race condition_java多线程(一)Race Condition现象及产生的原因

    什么是Race Condition 首先,什么是Race Condition呢,Race Condition中文翻译是竞争条件,是指多个进程或者线程并发访问和操作同一数据且执行结果与访问发生的特定顺序 ...

  2. python 很高兴问题_Python 3.7曾有一个很老的GIL竞态条件(race condition),我是这么解决的...

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 作者:Victor Stinner 作为Python最关键的组成部分之一:GIL(全局解释器锁),我花了4 ...

  3. 什么是Race Condition?

    简介 race condition是多线程的应用程序中经常遇到的问题,本文章接下来会解释什么是race condition,如何检测到它们以及如何解决这类问题. Race condition 从定义来 ...

  4. 数据争用(data race) 和竞态条件(race condition)

    在有关多线程编程的话题中,数据争用(data race) 和竞态条件(race condition)是两个经常被提及的名词,它们两个有着相似的名字,也是我们在并行编程中极力避免出现的.但在处理实际问题 ...

  5. Race Condition漏洞

    Race Condition Race Condition(竞争条件)是一种情形,在该情形下系统或者程序的输出受其他不可控事件的顺序或事件的影响.软件中的Race Condition通常出现在两个并发 ...

  6. java race condition_java 多线程下race condition问题

    这个问题的讨论来自内部的一个关于"多线程环境下使用Hashmap的安全问题"的讨论,HashMap多线程的问题之前已经提过一次,见之前的blog.本篇文章主要讨论多线程下race ...

  7. java race condition_Java中的Race condition和Critical section(译)

    Java中的Race condition和Critical section(译) race condition,即竞态,是一种可能发生于critical section中的特殊状态,critical ...

  8. Race condition

    在很多门课上都接触到race condition, 其中也举了很多方法解决这个问题.于是想来总结一下这些方法. Race condition 它旨在描述一个系统或者进程的输出依赖于不受控制的事件出现顺 ...

  9. (转)Race condition解决

    在很多门课上都接触到race condition, 其中也举了很多方法解决这个问题.于是想来总结一下这些方法. Race condition 它旨在描述一个系统或者进程的输出依赖于不受控制的事件出现顺 ...

  10. 竞态条件(race condition)

    在学习多线程的过程中,因为是非科班学生,操作系统的东西都是一知半解的,所以很多名词都没有理解,另外具体的Java虚拟机如何工作还需要后续的学习,这里只能慢慢学习了,等到这本书看完好好读读操作系统的东西 ...

最新文章

  1. 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战
  2. 人工智能:2018年发生了什么变化,2019年又将发生什么变化
  3. RabbitMQ学习总结(4)——分发任务在多个工作者之间实例教程
  4. 《HeadFirst Python》第一章学习笔记
  5. Opencv一维直方图的绘制
  6. fetch git pull 切换_git fetch git pull
  7. matlab机器人自动分拣_极智嘉分拣系统落地 助力打造智慧物流引擎
  8. mavenspringboot项目打包引入lib目录下jar包
  9. 类型 jpa mysql_Spring Boot集成JPA
  10. 安利几款语音识别软件
  11. 注解的原理又是怎么一回事
  12. zz详细讲解Quartz.NET
  13. 《卓有成效的管理者》培训分享——来自项目管理群的讨论
  14. java实现格拉布斯准则_格拉布斯准则(java代码)
  15. mac能开发android吗,怎么在Mac上开发Android应用
  16. 斐讯k2p 月光银 硬件版本A2-软件版本22.7.8.5 刷官改系统
  17. 前端 后端 MD5加盐
  18. 侯晓迪:全身心的投入,吃住都在实验室
  19. en结尾的单词_以en结尾的形容词
  20. 关闭或者开启Windows defender防火墙

热门文章

  1. UIApplication深入学习 调用程序开自身软件 发短信 打电话等
  2. JAVA中易出错的小问题(二)
  3. 201542010208、201571030331软件工程结对项目
  4. Ubuntu14.04上安装Jupyter的方法
  5. Git 分支及bug分支合并
  6. SharePoint2010 空白站点集无法找到术语管理库
  7. 【设计模式和面向对象设计】拾零(持续更新,个人零散笔记)
  8. 编写程序把一个保存有二进制小数的字符数组转换为浮点数
  9. 拓端tecdat|自然语言处理NLP:主题LDA、情感分析疫情下的新闻文本数据
  10. 拓端tecdat|R语言实现有限混合模型建模分析