视频字幕
死锁是计算机科学中一个重要的概念。它指的是在并发系统中,两个或多个进程因为争夺资源而造成的互相等待现象。如图所示,进程A持有资源1但等待资源2,而进程B持有资源2但等待资源1,这样就形成了死锁状态。
死锁的发生需要同时满足四个必要条件,也称为科夫曼条件。第一是互斥,资源一次只能被一个进程使用。第二是持有并等待,进程在持有资源的同时等待其他资源。第三是不可剥夺,资源不能被强制从进程那里剥夺。第四是循环等待,如图所示,形成进程等待资源的环路。
让我们通过一个经典的例子来理解死锁:哲学家就餐问题。五个哲学家围坐在圆桌旁,每两人之间放一根筷子。每个哲学家需要两根筷子才能吃饭。如果每个人都先拿起左边的筷子,然后等待右边的筷子,就会发生死锁。解决方案包括限制同时拿筷子的人数,或者让奇偶号哲学家采用不同的拿筷子顺序。
死锁的预防可以通过破坏四个必要条件中的任意一个来实现。比如破坏互斥条件,使用共享资源;破坏持有并等待条件,让进程一次性申请所有资源;破坏不可剥夺条件,允许强制回收资源;破坏循环等待条件,对资源进行编号按序申请。另外,银行家算法是一种著名的死锁避免算法,通过检查资源分配是否会导致不安全状态来避免死锁。
总结一下我们学到的内容:死锁是并发系统中进程互相等待资源而无法继续执行的现象。它需要同时满足互斥、持有并等待、不可剥夺和循环等待四个必要条件。我们可以通过预防、避免、检测和恢复等策略来处理死锁问题。银行家算法是其中最经典的死锁避免策略。理解死锁的概念和处理方法对于设计安全可靠的并发系统具有重要意义。