【问题标题】:Am I right about the logic of semaphores?我对信号量的逻辑是正确的吗?
【发布时间】:2013-08-28 00:57:41
【问题描述】:
这就是我对信号量计数的理解
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 作为值的情况下会发生什么。还是二进制信号量的实现与此不同?
【问题讨论】:
标签:
process
operating-system
semaphore
【解决方案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
我认为您不太了解信号量的结束位置,以及它在线程中的使用开始。我建议从上面的链接开始。然后继续尝试在一些简单的程序中使用信号量来实现同步和互斥。