スプリアスウェイクアップ
通知がないのに条件変数の待機から目覚めてしまう現象。
- 概念URI
https://comcomponent.com/knowledge/spurious-wakeup/
- 最終確認日
- 2026-08-01
- 機械可読データ
- JSON-LD
この概念が関わる関係
- Win32の条件変数はスプリアスウェイクアップの原因になることがあります。目覚めたら必ずロック内で条件を再確認し、偽ならwaitに戻るループにする。通知なしに目覚めることがあり、目覚めた時には別の消費者が要素を先取りしていることもある。 / 確度: 確立した関係 / 確認日: 2026-08-02 出典
- std::condition_variableはスプリアスウェイクアップの原因になることがあります。条件変数には通知なしに目覚めるスプリアスウェイクアップが存在するため、待機側は復帰時に条件を明示的に確認すべきであり、述語付きのwaitを使う。 / 確度: 確立した関係 / 確認日: 2026-08-02 出典
- Win32の条件変数はスプリアスウェイクアップの原因になることがあります。条件変数はロックの解放と待機への移行を不可分に行うユーザーモードオブジェクトだが、明示的な起床と結びつかない目覚めの対象となる。 / 確度: 確立した関係 / 確認日: 2026-08-22 出典
- std::condition_variableはスプリアスウェイクアップの原因になることがあります。スプリアスウェイクアップはPOSIXもWindowsもC++規格もそろって許した仕様で、ちょうど1つのスレッドだけを確実に起こす通知を厳密に実装すると、特にマルチプロセッサ環境で条件変数のすべての操作に余分な同期コストがかかるためである。ループの強制はコードを自己文書化し、より堅牢にするとも述べられている。 / 確度: 確立した関係 / 確認日: 2026-08-22 出典 出典
- WaitOnAddressはスプリアスウェイクアップの原因になることがあります。アドレスの値が変わるのを待つ最下層に近いAPIですら、シグナル時に戻ることは保証されるがそれ以外の理由で戻ることも許されている。低メモリ状態や過去のwakeの放棄が早期に目覚める例として挙げられ、使用例そのものが値を比較し直すwhileループの形をしている。 / 確度: 確立した関係 / 確認日: 2026-08-22 出典
- スプリアスウェイクアップは競合状態(race condition)の原因になることがあります。ifで1回だけ確認して待機に入るコードは、スプリアスウェイクアップか横取りが起きた瞬間に条件不成立のまま処理が進み、空のキューからの取り出しや未初期化データの参照といった、たまにしか出ないクラッシュ・データ破損になる。 / 確度: 条件付きの関係 / 確認日: 2026-08-22 出典
この概念を扱う記事
一次資料
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。