📜  门|门CS 2013 |第 65 题

📅  最后修改于: 2021-09-24 05:45:36             🧑  作者: Mango

三个并发进程 X、Y 和 Z 执行三个不同的代码段,这些代码段访问和更新某些共享变量。进程X对信号量a、b、c执行P操作(即等待);进程Y对信号量b、c、d执行P操作;进程Z在进入各自的代码段之前对信号量c、d和a执行P操作。在完成其代码段的执行后,每个进程对其三个信号量调用V操作(即信号)。所有信号量都是初始化为 1 的二进制信号量。以下哪一项代表进程调用 P 操作的无死锁顺序?
(A) X:P(a)P(b)P(c) Y:P(b)P(c)P(d) Z:P(c)P(d)P(a)
(B) X:P(b)P(a)P(c) Y:P(b)P(c)P(d) Z:P(a)P(c)P(d)
(C) X:P(b)P(a)P(c) Y:P(c)P(b)P(d) Z:P(a)P(c)P(d)
(D) X:P(a)P(b)P(c) Y:P(c)P(b)P(d) Z:P(c)P(d)P(a)答案:(乙)
说明:选项 A 会导致死锁。想象一个情况,进程 X 获取了 a,进程 Y 获取了 b,进程 Z 获取了 c 和 d。现在有循环等待。

选项 C 也可能导致死锁。想象一个情况,进程 X 获取了 b,进程 Y 获取了 c,进程 Z 获取了 a。现在有循环等待。

选项 D 也可能导致死锁。想象一个情况,进程 X 获取了 a 和 b,进程 Y 获取了 c。 X 和 Y 循环等待对方。

见 http://www.eee.metu.edu.tr/~halici/courses/442/Ch5%20Deadlocks.pdf

考虑选项 A),例如这里所有 3 个进程都是并发的,所以 X 将获得信号量 a,Y 将获得 b,Z 将获得 c,现在 X 被 b 阻塞,Y 被 c 阻塞,Z 得到 d 并被 a 阻塞。这样就会导致死锁。

类似地,可以计算出对于 B) 完成顺序是 Z,X 然后是 Y。

此问题与 https://www.geeksforgeeks.org/operating-systems-process-management-question-8/ 重复
这个问题的测验