当出现以下问题时,我正在研究二进制信号量:
假设有 3 个并发进程和 3 个二进制信号量……信号量被初始化为 S0=1、S1=0、S2=0。这些进程具有以下代码:
Process P0: Process P1: Process P2:
while (true){ wait(S1); wait(S2);
wait (S0); release (S0); release(S0);
print '0';
release (S1);
release (S2);
}
现在的问题是该过程将打印多少次 0 ?
让我解释一下我是如何解决它的。假设三个进程的前三个语句同时执行!即,进程p0的while语句,进程p1的wait(S1)和进程P2的wait(S2)。现在,wait(S1)和wait(S2)都将使信号量值-1和进程P1并且 P2 将被阻塞.. 然后进程 P0 的 wait(S0) 将被执行。当这种情况发生时,S0 的值变为 0 并且进程 P0 进入阻塞状态,结果所有进程都将被阻塞并处于死锁状态!但不幸的是,这不是答案。. 请告诉我我错在哪里以及解决方案如何进行?:|
编辑:
我对二进制信号量的方法是错误的。它们只能取 0 和 1!