Skip to content

Latest commit

 

History

History
20 lines (15 loc) · 1.52 KB

死锁.md

File metadata and controls

20 lines (15 loc) · 1.52 KB

死锁的条件

所以:死锁的条件?

  • 互斥条件:该资源任意一个时刻只由一个线程占用。(同一时刻,这个碗是我的,你不能碰)
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(我拿着这个碗一直不放)
  • 不剥夺条件:线程已获得的资源在末使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源。(我碗中的饭没吃完,你不能抢,释放权是我自己的,我想什么时候放就什么时候放)
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。(我拿了A碗,你拿了B碗,但是我还想要你的B碗,你还想我的A碗)比喻成棒棒糖也阔以。

面试官:所以解决死锁的办法是?

我:好的,没毛病

  • 预防死锁:
    • 资源一次性分配:破坏请求和保持条件。
    • 可剥夺资源:当进程新申请的资源不满足时,释放已经分配的资源。破坏不可剥夺条件
    • 资源有序分配:系统给进程编号,按某一顺序申请资源,释放资源则反序释放。破坏循环等待条件。
  • 避免死锁:银行家算法:分配资源前先评估风险,会不会在分配后导致死锁。 即分配给一个进程资源的时候,该进程能否全部返还占用的资源。
  • 检测死锁:建立资源分配表和进程等待表。
  • 解除死锁:可以直接撤销死锁进程,或撤销代价最小的进程。