【问题标题】:Zero permit semaphores?零许可信号量?
【发布时间】:2013-01-25 10:47:09
【问题描述】:

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

【问题讨论】:

    标签: synchronization semaphore


    【解决方案1】:

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

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

    fred = Semaphore(1)
    

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

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

    如果值为正,则表示线程数 可以不阻塞地递减。如果为负数,则表示数字 已阻塞并正在等待的线程数。 如果值为零,则表示存在 没有线程在等待,但如果一个线程试图递减,它会阻塞。

    (添加重点)

    【讨论】:

    • 我明白了...我假设既然您强调“初始”值,那么可以增加许可数量吗?那么,在初始为 0 许可的信号量上进行 release() 调用,在没有先前的 acquire() 调用的情况下,现在是否会给予该信号量 1 许可?
    • 在这种上下文/用法中,从“许可”的角度考虑信号量并不完全正确。该值可以是负数,考虑负数的许可是没有意义的。不要将信号量的值(如书中所用)视为许可的数量。该值的含义与我引用的部分中的描述完全相同。
    猜你喜欢
    • 2012-04-05
    • 2017-06-05
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多