Win32の条件変数
InitializeConditionVariableで作り、SleepConditionVariableCS/SRWで待ち、WakeConditionVariableで起こすWin32の待ち合わせ機構。
- 概念URI
https://comcomponent.com/knowledge/win32-condition-variable/
- 最終確認日
- 2026-08-01
- 機械可読データ
- JSON-LD
この概念が関わる関係
- Win32の条件変数はCRITICAL_SECTIONを利用します。公式の実装例では、CRITICAL_SECTIONで保護した有限循環バッファーに対して、消費側がSleepConditionVariableCSで待ち、生産側がWakeConditionVariableで起こす。SRWロックと組む場合はSleepConditionVariableSRWを使う。 / 確度: 確立した関係 / 確認日: 2026-08-22 出典
- Win32の条件変数はスプリアスウェイクアップの原因になることがあります。目覚めたら必ずロック内で条件を再確認し、偽ならwaitに戻るループにする。通知なしに目覚めることがあり、目覚めた時には別の消費者が要素を先取りしていることもある。 / 確度: 確立した関係 / 確認日: 2026-08-02 出典
- Win32の条件変数はポーリングによる待機の後継に当たります。SleepのポーリングループはCPUと応答性の両方を無駄にする。条件変数やイベント待機ならシグナルまでスレッドを休ませられる。 / 確度: 確立した関係 / 確認日: 2026-08-02 出典
- Win32の条件変数はスプリアスウェイクアップの原因になることがあります。条件変数はロックの解放と待機への移行を不可分に行うユーザーモードオブジェクトだが、明示的な起床と結びつかない目覚めの対象となる。 / 確度: 確立した関係 / 確認日: 2026-08-22 出典
- Win32の条件変数は横取り(stolen wakeup)の原因になることがあります。通知側がWakeConditionVariableを呼んでから、起こされたスレッドがロックを再取得してwaitから戻るまでには必ず時間差がある。その間にロックを取れる第三のスレッドがいれば、条件を先に消費できてしまう。 / 確度: 確立した関係 / 確認日: 2026-08-22 出典
- Win32の条件変数はCRITICAL_SECTIONを利用します。SleepConditionVariableCSは、指定したクリティカルセクションの解放と条件変数での待機を不可分に行い、目覚めるときはロックを再取得してから戻る。 / 確度: 確立した関係 / 確認日: 2026-08-22 出典
- Win32の条件変数はSRWロック(Slim Reader/Writer Lock)を利用します。SleepConditionVariableSRWを使えば、クリティカルセクションの代わりにSRWロックと組み合わせて同じ待ち合わせができる。どちらか一方のロックと組で使う。 / 確度: 確立した関係 / 確認日: 2026-08-22 出典
- Win32の条件変数は起こし損ね(lost wakeup)を防ぎます。条件変数の待機APIがロックの解放と眠りへの移行を不可分に行うよう設計されているのは、まさにこの隙間を閉じるためで、ロックの規律を守っている限り起きない。 / 確度: 確立した関係 / 確認日: 2026-08-22 出典
- Win32の条件変数はPulseEventの後継に当たります。PulseEventは信頼できないため使うべきではなく、主に後方互換のために存在し、代わりに条件変数を使うべきだと明言されている。静的解析の警告C28648にもなっている。 / 確度: 確立した関係 / 確認日: 2026-08-22 出典 出典
この概念を扱う記事
一次資料
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。