📅  最后修改于: 2023-12-03 15:10:59.383000             🧑  作者: Mango
死锁是多个进程因相互竞争资源而形成的一种僵持局面,导致进程无法向前推进,陷入了无穷等待的状态。 死锁会严重影响系统的稳定性和可靠性,因此应该尽可能地避免发生死锁。
死锁发生的原因在于进程间竞争资源的方式,主要有以下两种:
进程拥有的资源只能同时被一个进程占用,如果一个进程获取了某个资源,其他进程必须等待该进程释放该资源后才能获取这个资源。
进程在等待资源时,持有已经获取的资源不释放,等待其他进程释放自己需要的资源。
针对死锁问题,有多种死锁系统模型。
资源分配图是用图形化的方式描述资源之间关系的一种技术。用节点表示进程和资源,边表示资源之间的关系。在这种图中,形成环路,则表示发生了死锁。
以下是利用资源分配图来判断死锁的典型例子:
从上图可以看出,P1请求R1,但是R1已经被P2占用,P1等待P2释放R1;P2请求R2,但是R2已经被P1占用,P2等待P1释放R2,这时候就引发了死锁。
银行家算法是一种资源分配的算法,用于避免死锁。它通过计算进程所需资源和系统剩余资源之间的关系,判断是否可以为进程分配资源。如果可以分配,则进行分配;如果不行,则等待。
以下是银行家算法的基本思路:
银行家算法是一种比较适合避免死锁的算法。
死锁是多个进程因相互竞争资源形成的一种僵持局面,导致进程无法向前推进,陷入了无穷等待的状态。为了避免死锁,有多种死锁系统模型,其中基于资源分配图和银行家算法比较常见。了解死锁系统模型对程序员编写高质量程序具有重要意义。