さまざまなロック関連の質問を見て、(ほとんど)常に偽の起床のためにループを見つける私はこのような種類の起床を経験したことがありますか?偽の起床は実際に起こりますか?
「スプリアス」という用語は明白な理由がないことを知っていますが、そのような種類のイベントの理由は何ですか?
(注:私はループの練習に疑問を投げかけていないよ)
編集:(コードサンプルを好きな人のための)ヘルパー質問:
私は、次のプログラムを持っている場合、と私はそれを実行します。
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://stackoverflow.com/questions/1461913/does-c-monitor-wait-suffer-from-spurious-wakeups/1461956#1461956 – Gili
このEINTRのブロック解除は、Unixの内のすべてのブロックシステムの真の呼び出しをされて導出システム。これによりカーネルはより簡単になりましたが、アプリケーションプログラマは負担を買っていました。 –
私はpthread_cond_wait()と友人がEINTRを返すことができないと思っていましたが、擬似的に目を覚ますとゼロを返します。送信元: http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_cond_wait.html "これらの関数は[EINTR]のエラーコードを返しません。" – gubby