請告訴信號量使用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