当出现以下问题时,我正在研究二进制信号量:二进制信号如何进行?
假设有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的等待(S1)和进程P2的等待(S2)。现在,等待(S1)和等待(S2)都将使信号量值为-1,并且进程P1并且P2将被阻塞。然后执行处理P0的等待(S0)。发生这种情况时,S0的值变为0,并且进程P0进入阻塞状态,结果所有进程都将被阻塞并处于死锁状态!但不幸的是,这不是答案。 。请告诉我我错在哪里以及解决方案如何进展? :|
编辑:
我错了,我的方法来二进制信号..他们只能在0和1拿!