📅  最后修改于: 2020-12-14 09:27:17             🧑  作者: Mango
如果在所有资源都具有单个实例的资源分配图中形成一个循环,则系统将死锁。
在具有多实例资源类型的资源分配图的情况下,循环是死锁的必要条件,但不是充分条件。
以下示例包含三个进程P1,P2,P3和三个资源R2,R2,R3。所有资源均具有单个实例。
如果我们分析该图,则可以发现在图中形成了一个循环,因为该系统满足了所有四个死锁条件。
可以通过使用系统的资源分配图来形成分配矩阵。在分配矩阵中,将为分配的每个资源创建一个条目。例如,在下面的矩阵中,由于R3被分配给了P1,所以en输入在P1的前面,在R3的下面。
Process | R1 | R2 | R3 |
---|---|---|---|
P1 | 0 | 0 | 1 |
P2 | 1 | 0 | 0 |
P3 | 0 | 1 | 0 |
在请求矩阵中,将为每个请求的资源创建一个条目。如以下示例所示,P1需要R1,因此将在P1的前面和R1的下面进行输入。
Process | R1 | R2 | R3 |
---|---|---|---|
P1 | 1 | 0 | 0 |
P2 | 0 | 1 | 0 |
P3 | 0 | 0 | 1 |
我们既没有系统中可用的任何资源,也没有要发布的流程。每个过程至少需要一个资源才能完成,因此它们将持续持有每个过程。
我们无法使用可用资源满足至少一个过程的需求,因此,如我们在图中检测到周期时所确定的那样,系统陷入僵局。