死锁和活锁,饿死,阻塞

以下个人理解,请各位前辈多多指教:

死锁:

解释: 线程A或者B需要过独木桥(使用该进程),而C还没有走完(进程还在占用),于是三方僵死;
         也可以是没有C 的情况下,A和B互不礼让僵死.
         A和B都认为自己优先级最高应该使用该进程.
活锁:
解释:线程A和B都需要过桥(都需要使用进程),而都礼让不走(那到的系统优先级相同,都认为不是自己优先级高),就这么僵持下去.

饿死:

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

阻塞:

不用解释了吧?

以下网上搜到的解释:

死锁:
1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

活锁:
活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。 活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。
活锁可以认为是一种特殊的饥饿。 下面这个例子在有的文章里面认为是活锁。实际上这只是一种饥饿。因为没有体现出“活”的特点。 假设事务T2再不断的重复尝试获取锁R,那么这个就是活锁。

饥饿:

饥饿 ,与死锁和活锁非常相似。是指一个可运行的进程尽管能继续执行,但被调度器无限期地忽视,而不能被调度执行的情况。[1] 饥饿可以通过先来先服务资源分配策略来避免。

时间: 2024-11-09 11:12:18

死锁和活锁,饿死,阻塞的相关文章

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

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

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

死锁 死锁 线程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_新浪博客 教会徒弟饿死师傅吗

第十六章——处理锁、阻塞和死锁(2)——侦测阻塞和阻塞查询

原文:第十六章--处理锁.阻塞和死锁(2)--侦测阻塞和阻塞查询 前言: 如果一个事务正在等待一些给其他事务锁定的资源.这个事务就被成为"被阻塞的事务".反过来,引起阻塞的事务,也就是锁定资源并造成其他事务等待的事务叫做"正在阻塞的事务". 长时间运行事务会阻塞其他事务和查询,使他们等待长时间.在繁重的系统中,很多时候我们会遇到阻塞问题,如果一个事务因为阻塞未完成.会造成一些列的等待链. 本文将介绍如何发现并马上解决这方面的问题. 准备工作: 本例依旧使用SQLSe

死锁与活锁的区别,死锁与饥饿的区别

第一次玩属于自己的博客,今天在一个App上看到的,说的很好,再敲了一遍,分享一下有关于死锁.活锁及饥饿的概念和区别,希望大家共同进步! 死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程.死锁发生的四个条件1.互斥条件:线程对资源的访问是排他性的,如果一个线程对占用了某资源,那么其他线程必须处于等待状态,直到资源被释放.2.请求和保持条件:线程

死锁和活锁

死锁 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程. 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象:死锁." 虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件. 1)互斥条件:指进程对所分配到的资源进行排它性

别靠着金山却被饿死

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