0

这就是我对计数信号量的理解

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 作为值的情况下会发生什么。还是二进制信号量的实现与此不同?

4

1 回答 1

1

这里有几件事:

首先尝试了解信号量是用来做什么的。构建信号量之类的结构是为了帮助实现程序中的并发性。问问自己——你想达到什么目标?同步?相互排斥?两个都?

根据该问题的答案,您使用信号量的方式将完全改变。了解信号量的基本原理对于理解二进制信号量和计数信号量之间的区别至关重要。

我已经在这里详细解释了二进制/计数信号量之间的区别,这对你很有用:https ://stackoverflow.com/a/22582997/2112500 完全、缓慢、一步一步地完成,并确保你了解基本原理。您上面的代码虽然告诉我您已经了解(在有限程度上)信号量内部发生了什么,但并不一定告诉我您知道如何使用信号量。

例如,在这段伪代码中:

else
execute the c.s
after execution in c.s calls signal();

你是在等待中发出信号——这并不完全按照你想要的方式工作。

再一次,在这里: allow first process that is waiting and P1 leaves c.s 我认为您不太了解信号量的结束位置,以及它在线程中的使用开始。我建议从上面的链接开始。然后继续尝试在一些简单的程序中使用信号量来实现同步和互斥。

于 2014-03-22T21:34:58.900 回答