Synchronization 零许可信号量?

Synchronization 零许可信号量?,synchronization,semaphore,Synchronization,Semaphore,我试着用对问题的第一个回答来帮助我完成一项任务。具有0个许可证的信号量究竟是如何工作的?这对我来说似乎没有多大意义。只是为了在那个信号灯上创建一个永恒的等待吗?如果是这样的话,你怎么能让一个线程在等待一个永远不会给它的许可证时“越过”信号灯呢?还是来自信号灯小册,§2.2: 清单2.1:信号量初始化语法 函数信号量是一个构造函数;它创建并返回一个新的信号量信号量的初始值作为参数传递给构造函数。 因此,在作者的psedoocode中,0不是许可证的数量;它是信号量的初始值。值为零意味着什么?清单2

我试着用对问题的第一个回答来帮助我完成一项任务。具有0个许可证的信号量究竟是如何工作的?这对我来说似乎没有多大意义。只是为了在那个信号灯上创建一个永恒的等待吗?如果是这样的话,你怎么能让一个线程在等待一个永远不会给它的许可证时“越过”信号灯呢?

还是来自信号灯小册,§2.2:

清单2.1:信号量初始化语法 函数
信号量
是一个构造函数;它创建并返回一个新的信号量信号量的初始值作为参数传递给构造函数。

因此,在作者的psedoocode中,
0
不是许可证的数量;它是信号量的初始值。值为零意味着什么?清单2.1后面的文本对此进行了解释:

如果该值为正数,则它表示 可以在不阻塞的情况下减小。如果为负数,则表示数字 已阻止并正在等待的线程数如果值为零,则表示存在 没有线程等待,但如果线程尝试递减,它将阻塞。


(添加了重点)

我明白了。。。我想既然你强调的是“初始”值,那么许可证的数量可以增加吗?那么,对一个最初许可证为0的信号量进行release()调用,而之前没有进行acquire()调用,现在会给该信号量1个许可证吗?在这种上下文/用法中,用“许可证”来考虑信号量是不太正确的。这个值可以是负数,考虑许可证的负数是没有意义的。不要把一个信号量的值(如书中所使用的)看作是一个许可数。该值的含义与我引用的部分完全相同。
fred = Semaphore(1)