如下我的理解,请各位前辈多多指教:.net
死锁:线程
① 互斥条件:指进程对所分配到的资源进行排它性使用,在一段时间内某资源只由一个进程占用,若是此时还有其余进程请求资源,则请求者只能等待,直至占有资源的进程被释放。3d
② 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对本身已得到的其它资源保持不放。blog
③ 不剥夺条件:指进程已得到的资源,在未使用完以前,不能被剥夺,只能在使用完时由本身释放。进程
④环路等待条件:在发生死锁时,必然存在一个进程,资源的唤醒链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。资源
解释:get
线程A或者B须要过独木桥(使用该进程),而C尚未走完(进程还在占用),因而三方僵死;
也能够是没有C 的状况下,A和B互不礼让僵死.
A和B都认为本身优先级较高应该使用该进程.请求
活锁:im
活锁指的是任务或执行者没有被阻塞,因为某些条件没有知足,致使一直重复尝试,失败。活锁和死锁的区别在于,处于活锁的实体在不断的改变状态,而处于死锁的实体表现为等待,活锁有可能自行解开,死锁则不能。img
解释:线程A和B都须要过桥(都须要使用进程),而都礼让不走(那到的系统优先级相同,都认为不是本身优先级高),就这么僵持下去.
饿死:
指一个可运行的进行尽管能继续执行,但被调度器无限期的忽视,而不能被调度执行的状况,饿死能够根据先来先服务资源分配策略来避免。
解释:
这是个独木桥(单进程),桥上只能走一我的,B来到时A在桥上,B等待;
而此时比B年龄小的C来了,B让C现行(A走完后系统把进程分给了C),
C上桥后,D又来了,B又让D现行(C走完后系统把进程分个了D)
以此类推B一直是等待状态.
阻塞:
不用解释了吧?