如何判断是否存在死锁?

How to find deadlock exists or not?

考虑一个具有 4 种资源的系统 R1(3 个单元)、R2(2 个单元)、R3(3 个单元)、R4(2 个单元)。使用非抢占式资源分配策略。在任何给定情况下,如果无法完全满足请求,则不会受理该请求。三个进程P1,P2,P3如果独立执行,请求资源如下


Process P1:

t=0: requests 2 units of R2

t=1: requests 1 unit of R3

t=3: requests 2 units of R1

t=5: releases 1 unit of R2 and 1 unit of R1.

t=7: releases 1 unit of R3

t=8: requests 2 units of R4

t=10: Finishes  

Process P2:

t=0: requests 2 units of R3

t=2: requests 1 unit of R4

t=4: requests 1 unit of R1

t=6: releases 1 unit of R3

t=8: Finishes   

Process P3:

t=0: requests 1 unit of R4

t=2: requests 2 units of R1

t=5: releases 2 units of R1

t=7: requests 1 unit of R2

t=8: requests 1 unit of R3

t=9: Finishes

如果所有三个进程 运行 在时间 t = 0 同时开始,下列哪一个陈述是正确的?

  1. 所有进程都将完成,没有任何死锁

  2. 只有P1和P2会死锁

  3. 只有P1和P3会死锁

  4. 三个进程都会死锁

我 运行 通过请求和可用资源,所有进程都已完成,没有出现死锁。

  • 在 t = 3 时,进程 P1 必须等待,因为它没有获得所需的资源,但在 t = 5 时 P3 释放它们时,它会被整理出来。没有 "circular wait""hold and wait" 可以发生。
  • 下一次等待 P1 是在 t = 8 时它请求 R4 的 2 个,当 P3 在 t = 9 时完成排序。同上,没有 "circular wait""hold and wait" 可能发生。

除此之外,所有请求都会被立即处理运行。