零允许信号量?

时间:2013-02-10 00:51:42

标签: synchronization semaphore

我正在尝试使用对this问题的第一个回复来帮助我完成我正在进行的任务。具有0许可的信号量如何工作?这对我来说似乎没有多大意义。只是在那个信号量上创造一个永恒的等待吗?如果是这样的话,你怎么能有一个线程“越过”信号量而它只是在等待永远不会给它的许可证?

1 个答案:

答案 0 :(得分:6)

再次出自“信号量小书”,§2.2:

  

代码清单2.1:信号量初始化语法

fred = Semaphore(1)
     

函数Semaphore是构造函数;它创建并返回一个新的信号量。 信号量的初始值作为参数传递给构造函数。

所以在作者的pseduocode中,0不是许可证的数量;它是信号量的初始值。零值是什么意思?它在文本中立即进行清单2.1:

  

如果值为正,则表示该线程数   可以减少而不会阻塞。如果是负数,那么它代表数字   阻塞并正在等待的线程数。 如果值为零,则表示存在   没有线程在等待,但如果线程试图减少,它将阻止。

(重点补充)