【发布时间】:2013-01-25 10:47:09
【问题描述】:
我正在尝试使用对this 问题的第一个回复来帮助我完成我正在处理的任务。具有 0 个许可证的信号量究竟是如何工作的?这对我来说似乎没有多大意义。只是为了在那个信号灯处创造一个永恒的等待吗?如果是这样的话,你怎么能让一个线程“越过”信号量,而它只是在等待永远不会被授予的许可?
【问题讨论】:
我正在尝试使用对this 问题的第一个回复来帮助我完成我正在处理的任务。具有 0 个许可证的信号量究竟是如何工作的?这对我来说似乎没有多大意义。只是为了在那个信号灯处创造一个永恒的等待吗?如果是这样的话,你怎么能让一个线程“越过”信号量,而它只是在等待永远不会被授予的许可?
【问题讨论】:
再次来自信号量小书,§2.2:
清单 2.1:信号量初始化语法
fred = Semaphore(1)函数
Semaphore是一个构造函数;它创建并返回一个新的信号量。 信号量的初始值作为参数传递给构造函数。
所以在作者的伪代码中,0 不是许可数量;它是信号量的初始值。零值是什么意思?紧接着清单 2.1 的文本中对此进行了解释:
如果值为正,则表示线程数 可以不阻塞地递减。如果为负数,则表示数字 已阻塞并正在等待的线程数。 如果值为零,则表示存在 没有线程在等待,但如果一个线程试图递减,它会阻塞。
(添加重点)
【讨论】: