看到各種鎖定相關的問題,(幾乎)總是查找術語我不知道「因爲虛假喚醒的循環」的,有沒有人經歷過這樣一種喚醒(假設例如一個體面的硬件/軟件環境)?真的發生虛假喚醒嗎?
我知道術語「僞」是指沒有明顯原因,但有什麼可以爲此類事件的原因是什麼?
(注:我不是質疑循環練習。)
編輯:一個輔助的問題(對於那些誰喜歡代碼示例):
如果我有以下程序,我運行它:
public class Spurious {
public static void main(String[] args) {
Lock lock = new ReentrantLock();
Condition cond = lock.newCondition();
lock.lock();
try {
try {
cond.await();
System.out.println("Spurious wakeup!");
} catch (InterruptedException ex) {
System.out.println("Just a regular interrupt.");
}
} finally {
lock.unlock();
}
}
}
有什麼事到虛假喚醒這個await
,而不會永遠等待一個隨機事件?
http://www.jroller.com/cpurdy/entry/java_supplies_apologies_to_weird – akarnokd 2009-06-26 19:11:10
我讀了這篇文章,並給了我一個想法,即單元測試通過隨機/確定性地喚醒單元測試來測試一個應用程序對循環等待範例的一致性。或者它已經在某個地方可用? – akarnokd 2009-06-26 19:17:28
這是關於SO的另一個問題:「是否有*嚴格*虛擬機可用於測試?」。我很想看到一個嚴格的線程本地記憶 - 我不認爲它們還存在 – 2009-06-26 20:01:53