请告诉信号量使用1和零初始化的区别是什么。如下:信号量与1和0初始化的区别
public static Semaphore semOne = new Semaphore(1);
和
public static Semaphore semZero = new Semaphore(0);
请告诉信号量使用1和零初始化的区别是什么。如下:信号量与1和0初始化的区别
public static Semaphore semOne = new Semaphore(1);
和
public static Semaphore semZero = new Semaphore(0);
构造参数permits
(初始信号量计数器)是调用Semaphore.aquire()
能够之前所述计数器(许可证)制成是零,并且acquire()
块的数量。
是一个正常值,以确保只有一个线程通过获取。
semaphore.acquire();
try {
// Critical region
...
} finally {
semaphore.release();
}
对于的使用见here。
信号量是一种低级并发机制:当达到零阻塞线程执行时的计数器。它起源于Dijkstra,其中二进制信号量(0,1)是铁路信号量的一个比喻,用于表示传递(在0时停止,传递 - 许可),并且在受保护的轨道的末尾执行释放(++允许)。
semzero发布后有多少线程可以获取?是1吗?基本上什么是允许semzero – developer 2018-02-11 04:32:23
@developer允许考虑'... acquire(); [Critical Section] release(); ...'将允许另一个'acquire()'(在第一次获取后调用)通过。在计算机科学中,荷兰Dijkstra使用了火车类比:信号量,P = passeren = try-pass/acquire,V = vrij maken = release。 – 2018-02-11 21:08:24
它指定*许可*。勾选[here](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html) – TheLostMind 2014-08-29 07:37:28
@TheLostMind javadocs提到一个否定许可,但不是零 – 2014-08-29 07:38:43
它的行为与在许可证是否定的情况下。在调用acquire()之前,我们需要在信号量上调用release()。 – 2014-08-29 07:46:01