这就是我对计算信号量的理解
P1 enters critical state
calls wait()
wait()
{
semaphore--;
if (semaphore<=0)
block;
else
execute the c.s
after execution in c.s calls signal();
}
signal()
{
semaphore++;
If(blocked process exists)
allow first process that is waiting and P1 leaves c.s
}
如果我是正确的,那么告诉我在二进制信号量的情况下会发生什么,它只能有1和0作为值。或者二进制信号量的实现是否与此不同?
答案 0 :(得分:1)
这里有一些事情:
首先尝试了解信号量的构建方式。像信号量这样的构造是为了帮助实现程序中的并发而构建的。问问自己 - 你想要达到的目标是什么?同步?相互排斥?都?
根据该问题的答案,您使用信号量的方式将完全改变。理解信号量所做的基础对于理解二进制和计数信号量之间的区别至关重要。
我在这里详细解释了二进制/计数信号量之间的区别,这对您有用:https://stackoverflow.com/a/22582997/2112500 完整,缓慢,一步一步地完成这一过程,并确保您了解基础知识。上面的代码,虽然告诉我你已经理解(在一定程度上)在信号量里面发生了什么,但并不一定告诉我你知道如何使用它。< / p>
例如,在这段伪代码中:
else
execute the c.s
after execution in c.s calls signal();
你从等待中发出信号 - 这不会按照你想要的方式工作。
再次,在这里:
allow first process that is waiting and P1 leaves c.s
我不认为你完全掌握信号量结束的位置,并且它在线程中的使用开始了。我建议从上面的链接开始。然后继续尝试在一些简单的程序中使用信号量来实现同步和互斥。