死锁,活锁,饿死的区别

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

饥饿:考虑一台打印机分配的例子,当有多个进程需要打印文件时,系统 按照短文件优先的策略排序,该策略具有平均等待时间短的优点,似乎非常合 理,但当短文件打印任务源源不断时,长文件的打印任务将被无限期地推迟, 导致饥饿以至饿 死。

活锁:与饥饿相关的另外一个概念称为活锁 ,在忙式等待条件下发生的饥 饿,称为活锁。

不进入等待状态的等待称为忙式等待。另一种等待方式是阻塞式等待,进 程得不到共享资源时将进入阻塞状态,让出 CPU 给其他进程使用。忙等待和阻 塞式等待的相同之处在于进程都不具备继续向前推进的条件,不同之处在于处于忙等待的进程不主动放弃 CPU ,尽管 CPU 可能被剥夺,因而是低效的;而 处于阻塞状态的进程主动放弃 CPU ,因而是高效的。

活锁的例子:如果事务 T1 封锁了数据 R,事务 T2 又请求封锁 R,于是 T2 等待。T3 也请求封锁 R,当 T1 释放了 R 上的封锁后,系统首先批准了 T3 的 请求,T2 仍然等待。然后 T4 又请求封锁 R,当 T3 释放了 R 上的封锁之后, 系统又批准了 T4 的请求......T2 可能永远等待(在整个过程中,事务 T2 在不 断的重复尝试获取锁 R)。

活锁的时候,进程是不会阻塞的,这会导致耗尽 CPU 资源,这是与死锁最 明显的区别。 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一 直重复尝试,失败,尝试,失败。 活锁和死锁的区别在于,处于活锁的实体是 在不断的改变状态,所谓的“活”, 而处于死锁的实体表现为等待;活锁有一定 几率解开,而死锁是无法解开的。

避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一 数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁 一旦释放就批准申请队列中第一个事务获得锁
————————————————
版权声明:本文为CSDN博主「qq_43193797」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43193797/article/details/89082700

原文地址:https://www.cnblogs.com/Murcie/p/12171402.html

时间: 2024-11-12 06:42:53

死锁,活锁,饿死的区别的相关文章

Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)

死锁(deadlock) 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程. 虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件. 1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用.如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放. 2)请

死锁和活锁,饿死,阻塞

以下个人理解,请各位前辈多多指教: 死锁: 解释: 线程A或者B需要过独木桥(使用该进程),而C还没有走完(进程还在占用),于是三方僵死;         也可以是没有C 的情况下,A和B互不礼让僵死.         A和B都认为自己优先级最高应该使用该进程.活锁:解释:线程A和B都需要过桥(都需要使用进程),而都礼让不走(那到的系统优先级相同,都认为不是自己优先级高),就这么僵持下去. 饿死: 解释:这是个独木桥(单进程),桥上只能走一个人,B来到时A在桥上,B等待;        而此时比

多线程<二>死锁,活锁,饿死,阻塞的理解

死锁 死锁 线程A或者B需要过独木桥(使用该进程),而C还没有走完(进程还在占用),于是三方僵死: 也可以是没有C 的情况下,A和B互不礼让僵死. A和B都认为自己优先级最高应该使用该进程. 活锁 活锁 线程A和B都需要过桥(都需要使用进程),而都礼让不走(那到的系统优先级相同,都认为不是自己优先级高),就这么僵持下去. 饿死 饿死 这是个独木桥(单进程),桥上只能走一个人,B来到时A在桥上,B等待:而此时比B年龄小的C来了,B让C现行(A走完后系统把进程分给了C),C上桥后,D又来了,B又让D

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

活.死锁的定义 --引用https://www.cnblogs.com/sunnyCx/p/8108366.html 1.死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程. 比如:迎面开来的汽车A和汽车B过马路,汽车A得到了半条路的资源(满足死锁发生条件1:资源访问是排他性的,我占了路你就不能上来,除非你爬我头上去),汽车B占了汽车A的另外半

教会徒弟饿死师傅吗

教会徒弟饿死师傅吗_静听花开bjf_新浪博客 教会徒弟饿死师傅吗

转:java高并发学习记录-死锁,活锁,饥饿

死锁 两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 为什么会产生死锁: ① 因为系统资源不足. ② 进程运行推进的顺序不合适. ③ 资源分配不当. 产生死锁的条件有四个: ① 互斥条件:所谓互斥就是进程在某一时间内独占资源. ② 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放. ③ 不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺. ④ 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系. 避免

oracle 死锁和锁等待的区别

所谓的锁等待:就是一个事务a对一个数据表进行ddl或是dml操作时,系统就会对该表加上表级的排它锁,此时其他的事务对该表进行操作的时候会等待a提交或是回滚后,才可以继续b的操作 所谓的死锁:当两个或多个用户相互等待锁定的数据时就会发生死锁,这时这些用户被卡在不能继续处理业务,oracle可以自动检测死锁并解决他们,通过回滚一个死锁中的语句,释放锁定的数据,回滚的话会遇到ora-00060 deadlock detected while waiting for resource 模拟锁等待: 两个

别靠着金山却被饿死

前提:C Windows 方法:1)光盘Ghost 备份成文件.好像会自动分成每个2G的文件,影响最小.同时要调查Windows最大文件是多少? 2)矮人Ghost 备份成文件. 3) Ghost硬盘对拷 4)双击ghost64.exe,既然提供了这东西,就一定可以成功运行.最简单.能备份到网络盘吗?备份到D盘就最快了.而且目标最小.前提是D盘/移动硬盘空间足够.唯一的疑问:动态备份C盘?5)Image 可在Windows下运行6)Doors Win7 x64的默认分区格式 主要是研究运行环境,

斯蒂芬斯蒂芬的司法诉讼see饿死

 http://blog.sina.com.cn/s/blog_1310f9b860102vgr8.html http://blog.sina.com.cn/s/blog_13112d2770102vhsb.html http://blog.sina.com.cn/s/blog_131b1ed700102viiv.html http://blog.sina.com.cn/s/blog_131b5a1190102vovx.html http://blog.sina.com.cn/s/blog_