5

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

4

1 回答 1

12

再次来自信号量小书,§2.2:

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

fred = Semaphore(1)

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

所以在作者的伪代码中,0不是许可证的数量;它是信号量的初始值。零值是什么意思?紧接着清单 2.1 的文本中对此进行了解释:

如果该值为正,则表示可以在不阻塞的情况下递减的线程数。如果为负数,则表示已阻塞和等待的线程数。如果该值为零,则表示没有线程在等待,但如果一个线程试图递减,它将阻塞。

(重点补充)

于 2013-02-10T01:03:18.253 回答