初始化为 1 和 0 的信号量之间的差异
2022-09-01 15:28:47
请告诉用1和零初始化的信号量有什么区别。如下所示:
public static Semaphore semOne = new Semaphore(1);
和
public static Semaphore semZero = new Semaphore(0);
请告诉用1和零初始化的信号量有什么区别。如下所示:
public static Semaphore semOne = new Semaphore(1);
和
public static Semaphore semZero = new Semaphore(0);
Semaphore 实例的参数是可用的“允许”数。它可以是任何整数,而不仅仅是 0 或 1。
对于所有呼叫将阻止,并且呼叫将返回 false,直到您执行semZero
acquire()
tryAcquire()
release()
因为第一个调用将成功,其余调用将阻塞,直到第一个调用释放。semOne
acquire()
该类在这里有很好的文档记录。
参数:许可证 - 可用的初始许可证数。此值可能为负数,在这种情况下,必须在授予任何获取之前进行释放。
构造函数参数(初始信号量计数器)是在计数器(允许)为零和块之前可以进行的调用次数。permits
Semaphore.aquire()
acquire()
1 是正常值,以确保只有一个线程通过获取。
semaphore.acquire();
try {
// Critical region
...
} finally {
semaphore.release();
}
有关 0 的用法,请参阅此处。
信号量是并发的低级机制:当达到零阻塞线程执行时,计数器。它源于Dijkstra,其中二进制信号量(0,1)是铁路信号量的隐喻,表示通过(当0时停止,通过--允许),并在受保护轨道的末尾进行释放(++允许)。