面试题答案
一键面试死锁常见场景
- 资源竞争场景:多个进程竞争有限的资源,比如打印机、磁带机等独占资源。例如,进程A占用了打印机,请求磁带机;进程B占用了磁带机,请求打印机,此时双方都不释放已占资源,就可能导致死锁。
- 生产者 - 消费者场景变体:在有多个缓冲区的生产者 - 消费者模型中,如果生产者和消费者对缓冲区的获取和释放顺序不当。比如生产者按顺序获取缓冲区1、2,消费者按顺序获取缓冲区2、1,当双方都获取了第一个缓冲区后,都等待对方释放第二个缓冲区,就会产生死锁。
- 哲学家就餐场景:多个哲学家围绕一张桌子,每个哲学家左右各有一支筷子,哲学家需要同时拿起左右两支筷子才能就餐。如果每个哲学家都先拿起左边筷子,然后等待右边筷子,就会出现所有哲学家都在等待对方放下筷子的死锁情况。
预防死锁的方法及原理
- 破坏死锁的四个必要条件 - 互斥条件:
- 方法:允许资源共享使用,不使用独占资源方式。例如,将打印机这种独占设备改造为网络共享打印机,多个进程可分时使用。
- 原理:死锁的四个必要条件之一是互斥条件,即资源只能被一个进程独占使用。若打破此条件,资源可同时被多个进程使用,就不会因互斥使用资源而产生死锁。
- 破坏死锁的四个必要条件 - 占有并等待条件:
- 方法:进程在申请资源前,必须先释放已占有的所有资源。比如进程需要打印机和磁带机,它必须先释放当前占有的所有资源,然后一次性申请打印机和磁带机。
- 原理:占有并等待条件指进程已占有一些资源,又申请新资源且不释放已占资源。打破此条件,进程不会一边占有资源一边等待其他资源,避免了资源循环等待导致的死锁。
- 破坏死锁的四个必要条件 - 不可剥夺条件:
- 方法:当一个进程占有了某些资源,而又申请新资源得不到满足时,系统可剥夺该进程已占有的资源给其他进程使用。例如,进程A占用了资源R1,申请资源R2未得到,系统可剥夺R1给需要R1的进程B。
- 原理:不可剥夺条件指进程占有的资源不能被其他进程强行剥夺。打破此条件,通过剥夺机制,能打破因资源持续占有导致的死锁局面。
- 破坏死锁的四个必要条件 - 循环等待条件:
- 方法:对资源进行编号,进程只能按照编号递增的顺序申请资源。比如资源编号为1、2、3,进程申请资源时,只能先申请1,再申请2,最后申请3。
- 原理:循环等待条件指存在一个进程 - 资源的循环链。按资源编号递增申请,不会形成循环等待链,从而预防死锁。