Process 以下哪一项表示进程调用P操作的无死锁顺序?

Process 以下哪一项表示进程调用P操作的无死锁顺序?,process,operating-system,deadlock,semaphore,Process,Operating System,Deadlock,Semaphore,三个并发进程X、Y和Z执行三个不同的代码段,这些代码段访问和更新某些共享变量。进程X对信号量a、b和c执行P操作(即等待);进程Y对信号量b、c和d执行P操作;进程Z在输入相应的代码段之前对信号量c、d和a执行P操作。在完成其代码段的执行后,每个进程调用其三个信号量上的V操作(即signal)。所有信号量都是初始化为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)

三个并发进程X、Y和Z执行三个不同的代码段,这些代码段访问和更新某些共享变量。进程X对信号量a、b和c执行P操作(即等待);进程Y对信号量b、c和d执行P操作;进程Z在输入相应的代码段之前对信号量c、d和a执行P操作。在完成其代码段的执行后,每个进程调用其三个信号量上的V操作(即signal)。所有信号量都是初始化为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)

有人能解释一下答案吗?

答案是(B),因为这是唯一一个所有进程都以相同顺序打开锁的地方

(A)
X
p(A)
然后
p(c)
Z
p(c)
然后
p(A)
所以
X
可以有
A
并等待
c
Z
可以有
c
并等待
A

(B)
p(a)
p(c)
X
Z
之前,
p(B)
p(c)
X
Y
之前,
p(c)
p(d)
Z

(C)
中,
p(b)
p(C)
X和
Y中的问题

(D)
中,
p(a)
p(c)
X
Z
p(b)
p(c)
中的问题


我在一个系统上工作,这个系统在文件锁定方面有这样的问题。解决方案是确保所有进程以相同的顺序打开文件,因此我们选择按字母顺序打开它们。

是的,您是对的。答案是(B)。但我不明白你的最后一句话。。。你能解释一下为什么要按字母顺序排列吗?因为这里,ans(B)没有字母顺序,顺序不一定是字母顺序,这只是我们使用的惯例。您可以使用任何顺序,只要所有流程使用相同的顺序(答案已编辑)。