这可能很愚蠢,但我正在寻找所谓的“现实生活”软件示例,它使用计数或大于 1 的信号量。
换句话说,请不要保镖、图书馆员或厕所的例子。
我想我已经将类似的东西用于“读/写”锁。也就是说,我希望最多允许同时有 N 个读者,并且在没有活跃读者的情况下一次只允许一个作者。
因此任何读取线程都会锁定信号量并增加读取计数。如果读取计数小于 N,则锁定成功,读取器可以继续。如果没有,锁会导致读取线程 sched_yield。
如果我想锁定写作,我将计数设置为 N 以便没有更多的读者可以锁定 - 例如,当他们尝试锁定时,他们都开始睡觉。编写器线程不断尝试锁定读取信号量。每次读者发布时,作者都会再次增加 N,直到没有更多的读者。
然后写锁成功,写操作发生,读信号量被设置回零,以便读线程可以继续。
无限计数的信号量(Win32 中的 LONG_MAX)用于实现发送者-消费者方案。这样的信号量是用 max 创建的。计数 = LONG_MAX (0xFFFFFF ...)。发送者(资源创建者)创建一些资源并释放信号量。接收者(资源消费者)等待这个信号量,当发送者释放这个信号量时恰好唤醒一次。关于其他大于 1 的值,我从未使用过它们。