排他制御とデッドロックを理解する
共有資源を同時更新すると整合性が崩れるため、クリティカルセクションを排他制御する。複数資源を取得する処理では、取得順や保持条件によってデッドロックが起こり得る。
この単元で学ぶこと
- クリティカルセクションの意味と役割を説明できる
- ミューテックスの意味と役割を説明できる
- セマフォの意味と役割を説明できる
- 競合状態とデッドロックを区別し、代表的な予防策を説明できる
本文解説
排他制御は同時利用を制限して競合を防ぐ仕組み。デッドロックは複数処理が互いの保持資源を待ち続ける状態で、相互排他・保持待ち・横取り不可・循環待ちの条件が同時に成立すると起こり得る。
クリティカルセクション 共有資源を操作するため同時実行を制限すべき処理区間。 必要最小限にすると並行性を保ちやすい。
ミューテックス 一度に一つの実行主体だけが保護区間へ入るための排他機構。 ロック取得・解放を対応させる。
セマフォ 整数カウンタ等で同時利用可能数を管理する同期機構。 値1ならミューテックス相当の使い方もできる。
デッドロック 複数処理が互いに相手の資源解放を待ち続け進行不能になる状態。 循環した待ち関係が典型。
資源取得順序 複数資源を全処理で同じ順番に取得するルール。 循環待ちを避ける代表的な設計。
同じデータの同時更新なら排他、互いの資源解放待ちならデッドロックを疑う。待ち関係を書き出し循環があるか確認する。
P1がロックA保持中にBを待ち、P2がB保持中にAを待つと循環ができる。取得順をA→Bへ統一すればこの循環を作りにくい。
図解
重要ポイント
- クリティカルセクション: 共有資源を操作するため同時実行を制限すべき処理区間。
- ミューテックス: 一度に一つの実行主体だけが保護区間へ入るための排他機構。
- セマフォ: 整数カウンタ等で同時利用可能数を管理する同期機構。
- デッドロック: 複数処理が互いに相手の資源解放を待ち続け進行不能になる状態。
- 排他は競合防止、デッドロックは待ち関係の循環による停止。
間違えやすい点
- ロックを増やせば常に安全になると考えない。
- デッドロックと単なる長時間処理を混同しない。
- ロック解放漏れを無視しない。
用語解説
- クリティカルセクション
- 共有資源を操作するため同時実行を制限すべき処理区間。
- ミューテックス
- 一度に一つの実行主体だけが保護区間へ入るための排他機構。
- セマフォ
- 整数カウンタ等で同時利用可能数を管理する同期機構。
- デッドロック
- 複数処理が互いに相手の資源解放を待ち続け進行不能になる状態。
- 資源取得順序
- 複数資源を全処理で同じ順番に取得するルール。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。