📜  操作系统|流程管理|问题6

📅  最后修改于: 2021-07-02 14:19:15             🧑  作者: Mango

三个并发进程X,Y和Z执行三个不同的代码段,这些代码段用于访问和更新某些共享变量。进程X对信号a,b和c执行P操作(即等待);进程Y对信号b,c和d执行P操作;进程Z在输入相应的代码段之前对信号c,d和a执行P操作。在完成其代码段的执行后,每个进程都会在其三个信号量上调用V操作(即信号)。所有信号量都是初始化为1的二进制信号量。以下哪一项表示进程调用P操作的无死锁顺序? (GATE CS 2013)
(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)答案: (B)
说明:选项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。

这个问题是http://quiz.geeksforgeeks.org/gate-gate-cs-2013-question-16/的副本
这个问题的测验