Skip to content

1. 死锁

1.1 死锁的概念

死锁(Deadlock)是指在并发系统中,两个或多个进程(或线程)因互相等待对方释放资源而无法继续执行的状态【ChatGPT】。

死锁只有同时满足以下四个条件才会发生】:

  • 互斥条件(Mutual Exclusion):至少一个资源同时只能被一个进程占用,即一次只能有一个进程访问该资源。
  • 持有并等待条件(Hold and Wait):进程在持有至少一个资源的同时,继续请求其他资源,而这些资源可能被其他进程占用。
  • 不可剥夺条件(No Preemption):已经分配给进程的资源不能被强制性地剥夺,只能由持有资源的进程主动释放。
  • 循环等待条件(Circular Wait):存在一个进程资源的循环链,每个进程都在等待下一个进程所持有的资源。

1.2 避免死锁

为了解决死锁问题,可以采取以下方法【ChatGPT】:

  • 预防死锁:通过破坏死锁的四个必要条件之一来预防死锁的发生。例如,破坏循环等待条件,要求进程按照固定的资源请求顺序获取资源,这是最常见的并且可行的方法。比如线程1 和线程2 请求资源时都按照 资源A、资源B 的顺序获取。
  • 避免死锁:使用资源分配算法来避免进程请求资源时可能导致死锁的情况。例如,银行家算法可以根据资源的可用性来决定是否分配资源。
  • 检测和恢复:通过周期性地检测系统是否处于死锁状态,并采取相应的措施来恢复系统的正常运行。例如,使用资源分配图检测死锁,并采取资源回收或进程终止等方式解除死锁。
  • 忽略死锁:在某些情况下,由于死锁发生的概率较低或死锁的代价较小,可以选择忽略死锁问题,而不采取主动的死锁预防或恢复措施。