死锁、活锁和饿死的理解(转)

看到一组漫画,很形象的说明了死锁、活锁和饿死的区别,原文链接:http://f.dataguru.cn/thread-541686-1-1.html ,这篇文章的死锁有点问题,死锁参考的:https://www.cnblogs.com/lance43990740/p/6853631.html (话糙理不糙)

1.死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

比如:迎面开来的汽车A和汽车B过马路,汽车A得到了半条路的资源(满足死锁发生条件1:资源访问是排他性的,我占了路你就不能上来,除非你爬我头上去),汽车B占了汽车A的另外半条路的资源,A想过去必须请求另一半被B占用的道路(死锁发生条件2:必须整条车身的空间才能开过去,我已经占了一半,尼玛另一半的路被B占用了),B若想过去也必须等待A让路,A是辆兰博基尼,B是开奇瑞QQ的屌丝,A素质比较低开窗对B狂骂:快给老子让开,B很生气,你妈逼的,老子就不让(死锁发生条件3:在未使用完资源前,不能被其他线程剥夺),于是两者相互僵持一个都走不了(死锁发生条件4:环路等待条件),而且导致整条道上的后续车辆也走不了。(很粗鲁的相互竞争)

2.活锁:线程A和B都需要过桥(都需要使用进程),而都礼让不走(那到的系统优先级相同,都认为不是自己优先级高),就这么僵持下去.(很绅士,互相谦让)

3.饥饿::这是个独木桥(单进程),桥上只能走一个人,B来到时A在桥上,B等待;
        而此时比B年龄小的C来了,B让C现行(A走完后系统把进程分给了C),
        C上桥后,D又来了,B又让D现行(C走完后系统把进程分个了D)
        以此类推B一直是等待状态.

4.产生死锁的必要条件

(1)互斥使用(资源独占)

一个资源每次只能给一个进程使用(比如写操作)

(2)占有且等待

进程在申请新的资源的同时,保持对原有资源的占有

(3)不可抢占

资源申请者不能强行从资源占有者手中夺取资源,资源只能由占有者自愿释放

(4)循环等待

P1等待P2占有的资源,P2等待P3的资源,...Pn等待P1的资源,形成一个进程等待回路

5.活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。

活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。

6.饥饿,是指一个可运行的进程尽管能继续执行,但被调度器无限期地忽视,而不能被调度执行的情况。

饥饿是由资源分配策略决定的, 饥饿可以通过先来先服务等资源分配策略来避免。

死锁、活锁和饿死的理解(转)相关推荐

  1. java中活锁和死锁的区别_死锁、活锁、饿死和阻塞的个人理解

    以下个人理解,请各位前辈多多指教: 死锁: ① 互斥条件:指进程对所分配到的资源进行排它性使用,在一段时间内某资源只由一个进程占用,如果此时还有其他进程请求资源,则请求者只能等待,直至占有资源的进程被 ...

  2. 死锁、活锁、饿死和阻塞的个人理解

    以下个人理解,请各位前辈多多指教: 死锁: ① 互斥条件:指进程对所分配到的资源进行排它性使用,在一段时间内某资源只由一个进程占用,如果此时还有其他进程请求资源,则请求者只能等待,直至占有资源的进程被 ...

  3. 多线程二死锁,活锁,饿死,阻塞的理解

    假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情 ...

  4. java 活锁 线程饿死,JAVA并发编程(四)线程死锁、饥饿、活锁

    JAVA并发编程(四)线程死锁 线程死锁 什么是线程死锁呢? 为什么会线程死锁呢? 如何避免线程死锁? 什么是饥饿呢? 什么是活锁呢? 线程死锁 什么是线程死锁呢? 死锁是指两个或两个以上的线程在执行 ...

  5. 死锁与活锁的原因 与解决方法(附加“饿死”)

    死锁与活锁的原因 与解决方法(附加"饿死") 参考文章: (1)死锁与活锁的原因 与解决方法(附加"饿死") (2)https://www.cnblogs.co ...

  6. 操作系统饥饿现象_操作系统中的饿死现象怎样理解?

    什么是进程的饥饿和饿死? 在一个动态系统中,资源请求与释放是经常性发生的进程行为.对于每类系统资源,操作系统需要确定一个分配策略,当多个进程同时申请某类资源时,由分配策略确定资源分配给进程的次序. 资 ...

  7. 进程饥饿和死锁及饿死

    饥饿是指系统不能保证某个进程的等待时间上界,从而使该进程长时间等待,当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿.当饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称该进程被 ...

  8. java避免活锁.死锁的解决,死锁 活锁 饥饿 出现原因及解决方案

    文章目录 死锁 概念 死锁示例 为什么会出现死锁呢? 如何解决死锁呢? 解决死锁代码实现 活锁 概念 活锁示例: 如何解决活锁呢? 饥饿 概念 如何解决饥饿呢? 死锁 概念 死锁:一组互相竞争资源的线 ...

  9. 黄金3:雨露均沾-不要让你的线程在竞争中被“饿死”

    欢迎来到<并发王者课>,本文是该系列文章中的第13篇. 在上篇文章中,我们介绍了避免死锁的几种策略.虽然死锁臭名昭著,然而在并发编程中,除了死锁之外,还有一些同样重要的线程活跃性问题值得关 ...

最新文章

  1. 隔空操作之通过简单计算识别手的挥动反向
  2. 反射__获取delegate的信息
  3. 【Android 插件化】VirtualApp 源码分析 ( 添加应用源码分析 | LaunchpadAdapter 适配器 | 适配器添加元素 | PackageAppData 元素 )
  4. js 处理十万条数据_Python数据可视化2018:为什么这么多的库?
  5. VTK:Qt之RenderWindowUISingleInheritance
  6. [HAOI2016]字符合并(ing)
  7. 守护(后台)进程的创建
  8. 探索GaussDB(DWS)的过程化SQL语言能力
  9. 死磕Android_App 启动过程(含 Activity 启动过程)
  10. Hbase compact入门
  11. sudo: must be setuid root错误解决方法.
  12. Spring-data-redis操作redis知识总结
  13. 给定一个介于0到1之间的实数(如0.625),打印他的二进制表示
  14. Git Extensions 2.33出现unhandled exception has ……解决方法
  15. 计算机cad标题栏快捷键,AutoCAD快捷键和工具栏及菜单栏大集合
  16. 专升本英语——语法知识——高频语法——第五节 状语从句(时间状语从句-地点状语从句-原因状语从句-结果状语从句-条件状语从句-目的状语从句-让步状语从句-比较状语从句-方式状语从句)【学习笔记】
  17. 两年,从纯小白到腾讯阿里,应届非计算机毕业生的2014互联网求职之路
  18. 二叉树的遍历(非递归)
  19. astrm30米分辨率高程数据下载_全球任意地区5米12米30米数字高程模型DEM数据下载...
  20. 2D高德Android地图SDK 新手入门的com.amap.api.maps.MapView的坑

热门文章

  1. python 鼠标轨迹录制_按键鼠标轨迹录制大师
  2. linux - 文件的所有者、所属组、其他人
  3. php ucenter,单点登录 Ucenter示例分析
  4. 卡西欧计算机程序,卡西欧计算器编程计算示例
  5. sourcetree打开快捷_SourceTree使用方法
  6. 一次让我瞬间长大的经历
  7. 通过油猴子脚本改造iconfont页面,使得直接带i标签复制
  8. 怎样检查一张 SIMATIC 存储卡(SMC)有非一致性或者是格式错误?如何修复?
  9. 汽车诊断协议ISO15765
  10. MongoDB快速上手、windows安装、常用命令、文档基本增删改查、mongoDB的索引