Concurrency 二进制信号量是如何进行的?
我正在研究二进制信号量,这时出现了以下问题: 假设有3个并发进程和3个二进制信号量。。。信号量初始化为S0=1、S1=0、S2=0。这些过程具有以下代码:Concurrency 二进制信号量是如何进行的?,concurrency,operating-system,semaphore,critical-section,Concurrency,Operating System,Semaphore,Critical Section,我正在研究二进制信号量,这时出现了以下问题: 假设有3个并发进程和3个二进制信号量。。。信号量初始化为S0=1、S1=0、S2=0。这些过程具有以下代码: Process P0: Process P1: Process P2: while (true){ wait(S1); wait(S2); wait (S0);
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
让我解释一下我是如何解决这个问题的。。假设三个进程的前三条语句同时执行!i、 e,进程p0的while语句,进程p1的wait(S1)和进程P2的wait(S2)。。现在,wait(S1)和wait(S2)都将使信号量值为-1,进程P1和P2将被阻塞。。然后将执行处理P0的等待(S0)。当发生这种情况时,S0的值变为0,进程P0进入阻塞状态,因此所有进程都将被阻塞并处于死锁状态!!但不幸的是,这不是答案。请告诉我哪里错了,以及解决方案是如何进行的|
编辑:
我使用二进制信号量的方法是错误的。。他们只能接受0和1 好的。。所以我在这里回答我自己的问题:P 解决办法如下:
只能执行P1或P2中的一个,因为它们中的任何一个都可以在给定的时间处于临界区。。假设P2执行。它释放S0并终止
现在只有P0可以执行,因为它在while循环中,其条件设置为true,这使得它始终运行。
P0执行时打印0秒,并释放S1和S2。但是P1和P2已经终止,所以P0永远等待S0的释放至少两次”
”
如果我哪里做错了,请告诉我