MST
星途 面试题库

面试题:并发与同步:死锁检测与避免策略

在一个多线程操作系统环境中,由于线程对共享资源的竞争,可能会产生死锁。请详细阐述死锁产生的四个必要条件,以及至少两种死锁检测和避免的策略,并说明每种策略在实际应用中的优缺点。
14.3万 热度难度
操作系统并发与同步

知识考点

AI 面试

面试题答案

一键面试

死锁产生的四个必要条件

  1. 互斥条件:资源在某一时刻只能被一个线程所占有。例如打印机资源,同一时间只能被一个进程使用。
  2. 占有并等待条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放。如线程A已获得资源R1,又请求资源R2,在等待R2时,不释放R1。
  3. 不可剥夺条件:线程已获得的资源,在未使用完之前,不能被其他线程强行剥夺,只能由该线程自己释放。例如一个线程正在使用的文件资源,其他线程不能强行抢夺。
  4. 循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系。比如线程A等待线程B占有的资源,线程B等待线程C占有的资源,而线程C又等待线程A占有的资源,形成一个循环。

死锁检测策略

  1. 资源分配图算法
    • 优点:能够准确地检测出系统是否处于死锁状态。可以清晰地展示线程与资源之间的关系,直观地判断死锁情况。
    • 缺点:算法复杂度较高,对于大型复杂系统,检测效率较低。每次检测都需要遍历整个资源分配图,消耗大量系统资源。

死锁避免策略

  1. 银行家算法
    • 优点:可以有效避免死锁的发生,在资源分配前进行安全性检查,确保系统始终处于安全状态。能够充分利用系统资源,提高资源利用率。
    • 缺点:需要预先知道每个线程对资源的最大需求量,在实际应用中,这往往难以准确预测。算法实现较为复杂,增加了系统开销。
  2. 资源分配拒绝策略
    • 优点:实现相对简单,在资源分配时,只要发现可能导致死锁的分配请求,就拒绝该请求。对系统资源的动态变化适应性较好。
    • 缺点:可能会导致某些线程长期得不到资源,出现“饥饿”现象。可能会因为过度拒绝资源分配请求,降低系统资源的利用率。