gpt4 book ai didi

java - 信号量是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 23:01:31 26 4
gpt4 key购买 nike

信号量可以小于0吗?我的意思是,假设我有一个 N=3 的信号量,我调用了 4 次“down”,那么 N 将保持为 0 但一个进程将被阻塞?

反之亦然,如果一开始我调用,N可以大于3吗?因为正如我所见,如果一开始我调用了几次 N 可以高于 3,那么稍后我可以调用更多次,从而在临界区中放置更多进程然后信号量允许我.

如果有人愿意为我澄清一下,我将不胜感激。

格雷格

最佳答案

(使用给定 Java 标记的 java.util.concurrent.Semaphore 中的术语。其中一些细节是特定于实现的。我怀疑您的“向下”是 Java 信号量的 acquire() 方法,而你的“向上”是 release()。)

是的,您最后一次调用 acquire() 将阻塞,直到另一个线程调用 release() 或您的线程被中断。

是的,您可以多次调用 release(),然后多次调用 - 至少使用 java.util.concurrent.Semaphore 是这样。

信号量的一些其他实现可能有一个“最大”许可数的概念,超过该最大值的释放调用将失败。 Java Semaphore 类允许相反的情况,其中信号量可以从负数的许可开始,并且所有 acquire() 调用都将失败,直到有足够的 release() 调用。许可数一旦变为非负数,就永远不会再变为负数。

关于java - 信号量是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1221322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com