某个计算生成两个数组 a 和 b,使得 a[i]=f(i) for 0 ≤ i < n 和 b[i]=g(a[i]) for 0 ≤ i < n。假设这个计算被分解为两个并发进程 X 和 Y,使得 X 计算数组 a,Y 计算数组 b。这些过程使用两个二进制信号量 R 和 S,两者都初始化为零。数组 a 由两个进程共享。这些过程的结构如下所示。
Process X: Process Y:
private i; private i;
for (i=0; i < n; i++) { for (i=0; i < n; i++) {
a[i] = f(i); EntryY(R, S);
ExitX(R, S); b[i]=g(a[i]);
} }
以下哪一项代表 ExitX 和 EntryY 的正确实现?
(一种)
ExitX(R, S) {
P(R);
V(S);
}
EntryY (R, S) {
P(S);
V(R);
}
(乙)
ExitX(R, S) {
V(R);
V(S);
}
EntryY(R, S) {
P(R);
P(S);
}
(C)
ExitX(R, S) {
P(S);
V(R);
}
EntryY(R, S) {
V(S);
P(R);
}
(四)
ExitX(R, S) {
V(R);
P(S);
}
EntryY(R, S) {
V(S);
P(R);
}
(一) A
(乙)乙
(C)丙
(四)丁答案: (C)
解释:
The purpose here is neither the deadlock should occur
nor the binary semaphores be assigned value greater
than one.
A leads to deadlock
B can increase value of semaphores b/w 1 to n
D may increase the value of semaphore R and S to
2 in some cases
见 https://www.geeksforgeeks.org/operating-systems-process-management-question-13/
这个问题的测验