如果在所有资源都具有单个实例的资源分配图中形成一个循环, 则系统将死锁。
在具有多实例资源类型的资源分配图的情况下, 循环是死锁的必要条件, 但不是充分条件。
以下示例包含三个进程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 |
我们既没有系统中可用的任何资源, 也没有要发布的线程。每个线程至少需要一个资源才能完成, 因此它们将持续持有每个线程。
【使用RAG进行死锁检测】我们无法使用可用资源满足至少一个线程的需求, 因此, 如我们在图中检测到周期时所确定的那样, 系统陷入僵局。
推荐阅读
- 防止死锁解析
- 记一次springboot项目,maven引发的悲剧(Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServ
- Android 开发中Service完全解析
- tensorflow API _ 2 (tf.app.flags.FLAGS)
- android -------- Eclipse下的NDK配置环境
- 背单词app测试
- 背单词类APP测试与评估
- 如何更改 Apple ID 国家或地区
- Android智能手机中各种音频场景下的audio data path