所谓死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外作用,这些进程都将无法向前推进。
1. 死锁产生的原因
1)进程推进的顺序不当
2)系统资源的不足
3)系统资源分配不当
2. 死锁产生的必要条件
产生死锁必须同时满足一下四个条件,只要其中任一条件不成立,死锁就不会发生。
互斥条件:进程要求对所分配的资源进行排他性控制,即在一段时间内某资源仅为一个进程所有。此时若有其他进程请求该资源,则进程只能等待。
不剥夺条件:进程所获的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放。
请求和保持条件:进程每次申请它所需要的一部分资源,在等待新资源的同时,在等待新资源的同时,进程继续占有已分配到的资源。
循环等待条件:存在一种资源的循环等待链,链中每个进程已获得的资源同时被链中下一个进程所请求。即存在一个处于等待状态的进程集合{P1,P2,P3,...,Pn},其中Pi等待的资源被Pi+1(i=0,1,...,n-1)占有,Pn等待的资源被P0占有。
3.死锁处理策咯
1)预防死锁:设置某些限制条件,破环产生死锁的四个必要条件中的一个或几个。
2)避免死锁:在资源的动态分配过程中,用某种方法防止系统进入不安全状态。银行家算法是著名的死锁避免算法。
3)死锁的检测及解除:无须采取任何限制性措施,允许进程在运行过程中发生死锁,通过系统的检测机制及时地检测出死锁的发生,然后采取某种措施解除死锁。死锁的检测可利用资源分配图来描述。死锁的解除主要方法如下:
(1)资源剥夺法
(2)撤销进程法
(3)进程回退法
参考资料:
《王道程序员求职宝典》