如果在所有资源都具有单个实例的资源分配图中形成一个循环, 则系统将死锁。
在具有多实例资源类型的资源分配图的情况下, 循环是死锁的必要条件, 但不是充分条件。
以下示例包含三个进程P1, P2, P3和三个资源R2, R2, R3。所有资源均具有单个实例。
如果我们分析该图, 则可以发现在图中形成了一个循环, 因为该系统满足了所有四个死锁条件。
分配矩阵
可以通过使用系统的资源分配图来形成分配矩阵。在分配矩阵中, 将为分配的每个资源创建一个条目。例如, 在下面的矩阵中, 由于R3被分配给P1, 因此在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 |
Avial =(0, 0, 0)
我们既没有系统中可用的任何资源, 也没有要发布的线程。每个线程至少需要一个资源才能完成, 因此它们将持续持有每个线程。
我们无法使用可用资源满足至少一个线程的需求, 因此, 如我们在图中检测到周期时所确定的那样, 系统陷入僵局。
评论前必须登录!
注册