我正在尝试使用对this问题的第一个回复来帮助我完成我正在进行的任务。具有0许可的信号量如何工作?这对我来说似乎没有多大意义。只是在那个信号量上创造一个永恒的等待吗?如果是这样的话,你怎么能有一个线程“越过”信号量而它只是在等待永远不会给它的许可证?
答案 0 :(得分:6)
再次出自“信号量小书”,§2.2:
代码清单2.1:信号量初始化语法
fred = Semaphore(1)
函数
Semaphore
是构造函数;它创建并返回一个新的信号量。 信号量的初始值作为参数传递给构造函数。
所以在作者的pseduocode中,0
不是许可证的数量;它是信号量的初始值。零值是什么意思?它在文本中立即进行清单2.1:
如果值为正,则表示该线程数 可以减少而不会阻塞。如果是负数,那么它代表数字 阻塞并正在等待的线程数。 如果值为零,则表示存在 没有线程在等待,但如果线程试图减少,它将阻止。
(重点补充)