MST

星途 面试题库

面试题:进程管理之高级难度:死锁问题与线程同步策略

假设在一个多线程应用程序中,出现了死锁现象。请详细分析死锁产生的四个必要条件,并提出至少两种不同的线程同步策略来预防或解决死锁问题,同时阐述每种策略的优缺点。
46.7万 热度难度
操作系统进程管理

知识考点

AI 面试

面试题答案

一键面试

死锁产生的四个必要条件

  1. 互斥条件:资源在某一时刻只能被一个线程占用,其他线程若要使用该资源,必须等待其被释放。例如打印机资源,同一时间只能被一个进程使用打印任务。
  2. 占有并等待条件:线程已经占有了至少一个资源,但又请求新的资源,而新资源被其他线程占有,此时该线程会等待新资源,并且不会释放已占有的资源。比如一个线程持有资源A,又请求资源B,而资源B被另一个线程持有。
  3. 不可剥夺条件:已分配给线程的资源,在未使用完之前,不能被其他线程强行剥夺,只能由该线程自己主动释放。例如一个线程获取到的文件锁,其他线程不能强行夺走。
  4. 循环等待条件:存在一个线程集合{T1, T2, …, Tn},T1等待T2占有的资源,T2等待T3占有的资源,……,Tn等待T1占有的资源,形成一个循环等待链。

线程同步策略及优缺点

  1. 破坏占有并等待条件
    • 策略:线程在启动前一次性申请完它所需要的所有资源,如果有任何一个资源无法获取,则该线程不占用任何资源,直接等待。当所有资源都可获取时,才一次性分配给该线程。
    • 优点:实现相对简单,从根源上破坏了死锁产生的占有并等待条件,能有效预防死锁。
    • 缺点:资源利用率较低,可能会造成一些资源长时间闲置。例如有些资源可能只是在程序运行后期才会用到,但由于这种策略,在程序一开始就被占用。
  2. 破坏循环等待条件
    • 策略:对资源进行排序,规定线程必须按照资源的顺序依次申请资源。例如给资源编号1、2、3,线程只能先申请1,再申请2,最后申请3。
    • 优点:可以有效预防死锁,在实际应用中如果资源类型相对固定,这种方法比较实用。
    • 缺点:资源顺序可能不好确定,如果资源关系复杂,确定合理的顺序可能比较困难。而且这种方法缺乏灵活性,在资源动态变化的场景下适应性较差。
  3. 资源分配图算法(银行家算法)
    • 策略:系统先对每个线程所需要的资源进行评估,在每次资源分配之前,判断此次分配是否会导致系统进入不安全状态(可能产生死锁的状态)。只有在分配后系统仍处于安全状态时,才进行资源分配。
    • 优点:可以精确判断资源分配是否会导致死锁,在保证系统不产生死锁的前提下,能最大化资源利用率。
    • 缺点:实现复杂,需要额外的数据结构和算法来记录和计算资源状态。而且每次资源请求都要进行复杂的计算,性能开销较大。