[解決済み】Javaのspurious wakeupは実際に起こるのでしょうか?
質問
ロックに関する様々な質問を見ていると、(ほとんど)常に「偽のウェイクアップのためにループする」という用語が見つかります。 1 このようなウェイクアップを経験された方はいらっしゃるでしょうか(例えばまともなハードウェア/ソフトウェア環境を想定して)?
スプリアス」とは、明らかな理由がないという意味だと思いますが、このような事象が発生する理由は何でしょうか?
( 1 注:ループのやり方に疑問を持っているわけではありません)
編集する お助け質問(コードサンプル好きな人向け)。
以下のようなプログラムがあり、それを実行した場合。
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
ランダムなイベントを永遠に待つことなく、スプリアスを起こすことができますか?
解決方法は?
ウィキペディア spurious wakeupsに関する記事 にはこんな豆知識があります。
<ブロッククオート
は
pthread_cond_wait()
関数は、Linux では
futex
システムコールがあります。Linuxの各ブロッキング・システムコールは、突然
EINTR
がシグナルを受信したとき。...
pthread_cond_wait()
の外にいたわずかな時間で本当の目覚めを逃してしまうかもしれないので、待ち時間を再開することはできません。
futex
システムコールを使用します。このレースコンディションは、呼び出し元が不変量をチェックすることでしか回避できない。したがって、POSIXシグナルは偽のウェイクアップを発生させます。
概要 : Linuxのプロセスがシグナルを受けた場合、待機中のスレッドはそれぞれ素敵でホットな スプリアスウェイクアップ .
私はそれを買う。よく言われる「パフォーマンスのため」という曖昧な理由よりは、飲み込みやすいと思います。
関連
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] ボタンでTextFieldをクリアする(Java)
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] なぜJPAには@Transientアノテーションがあるのですか?
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] java swingアプリケーションでJCEがプロバイダBCを認証できない
-
[解決済み] pthread_cond_wait で spurious wakeup が発生するのはなぜですか?