死锁,活锁,饿死,阻塞的理解

原文链接:死锁和活锁,饿死,阻塞个人理解

死锁

死锁

线程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] 饥饿可以通过先来先服务资源分配策略来避免。

推荐阅读更多精彩内容

  • 1、竞态条件: 定义:竞态条件指的是一种特殊的情况,在这种情况下各个执行单元以一种没有逻辑的顺序执行动作,从而导致...
    Hughman阅读 364评论 0 6
  • 原链接:http://f.dataguru.cn/thread-541686-1-1.html 以下个人理解,请各...
    青春呼哮而过阅读 410评论 0 2
  • 第一次玩属于自己的博客,今天在一个App上看到的,说的很好,再敲了一遍,分享一下有关于死锁、活锁及饥饿的概念和区别...
    堤岸小跑阅读 394评论 0 0
  • 所谓死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用...
    UILabelkell阅读 622评论 0 7
  • 今天是5.20,一个特殊又令人激动的日子——婚姻家庭咨询师考试的日子。遵循教授守时的理念,早上提前一个半小时出门(...
    嘉洋妈咪阅读 132评论 0 2