以下个人理解,请各位前辈多多指教: 死锁: ① 互斥条件:指进程对所分配到的资源进行排它性使用,在一段时间内某资源只由一个进程占用,如果此时还有其他进程请求资源,则请求者只能等待,直至占有资源的进程被释放。 ② 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。 ③ 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。 ④环路等待条件:在发生死锁时,必然存在一个进程,资源的唤醒链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。 解释: 线程A或者B需要过独木桥(使用该进程),而C还没有走完(进程还在占用),于是三方僵死; 活锁: 活锁指的是任务或执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败。活锁和死锁的区别在于,处于活锁的实体在不断的改变状态,而处于死锁的实体表现为等待,活锁有可能自行解开,死锁则不能。
饿死: 指一个可运行的进行尽管能继续执行,但被调度器无限期的忽视,而不能被调度执行的情况,饿死可以根据先来先服务资源分配策略来避免。 解释: 这是个独木桥(单进程),桥上只能走一个人,B来到时A在桥上,B等待; 阻塞: 不用解释了吧? |
|
来自: Sophia_Study > 《/SQL》