所以:死锁的条件?
- 互斥条件:该资源任意一个时刻只由一个线程占用。(同一时刻,这个碗是我的,你不能碰)
- 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(我拿着这个碗一直不放)
- 不剥夺条件:线程已获得的资源在末使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源。(我碗中的饭没吃完,你不能抢,释放权是我自己的,我想什么时候放就什么时候放)
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。(我拿了A碗,你拿了B碗,但是我还想要你的B碗,你还想我的A碗)比喻成棒棒糖也阔以。
面试官:所以解决死锁的办法是?
我:好的,没毛病
- 预防死锁:
- 资源一次性分配:破坏请求和保持条件。
- 可剥夺资源:当进程新申请的资源不满足时,释放已经分配的资源。破坏不可剥夺条件
- 资源有序分配:系统给进程编号,按某一顺序申请资源,释放资源则反序释放。破坏循环等待条件。
- 避免死锁:银行家算法:分配资源前先评估风险,会不会在分配后导致死锁。 即分配给一个进程资源的时候,该进程能否全部返还占用的资源。
- 检测死锁:建立资源分配表和进程等待表。
- 解除死锁:可以直接撤销死锁进程,或撤销代价最小的进程。