如果两个或多个进程永久等待某个事件而该事件只能由这些等待进程的某一个引起,那么死锁就会发生。死锁的发生需要满足四个必要条件:
- 互斥:资源的互斥访问,没有互斥就不会产生死锁;
- 占有并等待:某个进程占有了一定资源,并且因无法得到其他资源而等待;
- 非抢占:某个进程所占有的资源,不允许被其他进程抢占;
- 循环等待:对于进程序列{P0, p1, …… , Pi, Pi+1, ……, Pn},Pi在等待Pi+1所占有的资源,P0占有了Pn需要的资源;
原理上,有三种方法来处理死锁:
- 采取一定的协议来预防(破坏死锁必要条件的任意一个)或者避免(诸如银行家算法之类)死锁,确保系统不会进入到死锁状态;
- 允许系统进入死锁状态,但通过一定的算法来检测之,并恢复(终止相关进程或者抢占资源);
- 忽略死锁问题,并假设系统中永远都不会程序死锁(这种方法被绝大多数系统采用,包括Unix);
你好!除了代码,此处没有多少原创之物,皆为本人搜集、整理、总结之记录与心得,欢迎转载分享!转载时请尽量注明出处,将不胜感激。祝你健康、快乐!
Be the first to comment on this entry.