📜  门| GATE-CS-2006 |第78章

📅  最后修改于: 2021-06-29 12:19:00             🧑  作者: Mango

屏障是一种同步构造,其中一组进程进行全局同步,即,该组中的每个进程都到达屏障,并等待所有其他进程到达,然后所有进程都离开屏障。令集合中的进程数为3,S为具有通常P和V函数的二进制信号量。考虑下面的屏障的C实现,其中行号显示在左侧。

void barrier (void) {
1:   P(S);
2:   process_arrived++;
3.   V(S);
4:   while (process_arrived !=3);
5:   P(S);
6:   process_left++;
7:   if (process_left==3) {
8:      process_arrived = 0;
9:      process_left = 0;
10:  }
11:  V(S);
}

变量process_arrived和process_left在所有进程之间共享,并初始化为零。在并发程序中,这三个进程在需要全局同步时都会调用barrier函数。

上述障碍的实现是不正确的。以下哪一项是正确的?
(A)由于使用了二进制信号量S,所以屏障实现是错误的
(B)如果两个屏障同时存在,则屏障实施可能导致死锁
调用立即连续使用。
(C)第6到10行不必在关键部分内
(D)如果只有两个过程而不是三个过程,则屏障实现是正确的。答案: (B)
说明: process_arrived可能大于3。到达的进程不可能再次变为3,从而导致死锁。
这个问题的测验