信号量如何以及为什么可以发出比初始化时更多的许可?

2024-01-01

我正在阅读《Java 并发实践》一书。在一个关于java.util.concurrent.Semaphore,以下几行出现在书中。这是对其实施“虚拟许可”对象的评论

该实施没有实际的许可对象,并且Semaphore做 不将分配的许可与线程关联起来,因此在 一个线程可以从另一个线程中释放。你可以想到acquire作为消费许可证和release正如创造一个; ASemaphore不限于创建时所使用的许可证数量。

有人可以解释一下吗?我很难理解这一点。如果我们创建一个固定大小的池,我们就会创建固定数量的“许可证”。从上面的说法来看,“许可证”似乎还可以继续增长。为什么要这样设计呢?


该实现没有“分发”许可对象,而是只有一个计数器。当“创建”新许可证时,计数器增加,当“返回”许可证时,计数器减少。

这比一直创建实际对象具有更好的性能。

代价是信号量本身无法检测某些类型的编程错误(例如未经授权的许可兑现或信号量泄漏)。作为编码员,您必须确保自己遵守规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

信号量如何以及为什么可以发出比初始化时更多的许可? 的相关文章

随机推荐