排他制御とデッドロックを理解する

共有資源を同時更新すると整合性が崩れるため、クリティカルセクションを排他制御する。複数資源を取得する処理では、取得順や保持条件によってデッドロックが起こり得る。

この単元で学ぶこと

  • クリティカルセクションの意味と役割を説明できる
  • ミューテックスの意味と役割を説明できる
  • セマフォの意味と役割を説明できる
  • 競合状態とデッドロックを区別し、代表的な予防策を説明できる

本文解説

排他制御は同時利用を制限して競合を防ぐ仕組み。デッドロックは複数処理が互いの保持資源を待ち続ける状態で、相互排他・保持待ち・横取り不可・循環待ちの条件が同時に成立すると起こり得る。

クリティカルセクション 共有資源を操作するため同時実行を制限すべき処理区間。 必要最小限にすると並行性を保ちやすい。

ミューテックス 一度に一つの実行主体だけが保護区間へ入るための排他機構。 ロック取得・解放を対応させる。

セマフォ 整数カウンタ等で同時利用可能数を管理する同期機構。 値1ならミューテックス相当の使い方もできる。

デッドロック 複数処理が互いに相手の資源解放を待ち続け進行不能になる状態。 循環した待ち関係が典型。

資源取得順序 複数資源を全処理で同じ順番に取得するルール。 循環待ちを避ける代表的な設計。

同じデータの同時更新なら排他、互いの資源解放待ちならデッドロックを疑う。待ち関係を書き出し循環があるか確認する。

P1がロックA保持中にBを待ち、P2がB保持中にAを待つと循環ができる。取得順をA→Bへ統一すればこの循環を作りにくい。

図解

排他制御とデッドロック
共有資源の同時利用を抑える排他と、資源待ちが循環するデッドロックを分けて考える。

重要ポイント

  • クリティカルセクション: 共有資源を操作するため同時実行を制限すべき処理区間。
  • ミューテックス: 一度に一つの実行主体だけが保護区間へ入るための排他機構。
  • セマフォ: 整数カウンタ等で同時利用可能数を管理する同期機構。
  • デッドロック: 複数処理が互いに相手の資源解放を待ち続け進行不能になる状態。
  • 排他は競合防止、デッドロックは待ち関係の循環による停止。

間違えやすい点

  • ロックを増やせば常に安全になると考えない。
  • デッドロックと単なる長時間処理を混同しない。
  • ロック解放漏れを無視しない。

用語解説

クリティカルセクション
共有資源を操作するため同時実行を制限すべき処理区間。
ミューテックス
一度に一つの実行主体だけが保護区間へ入るための排他機構。
セマフォ
整数カウンタ等で同時利用可能数を管理する同期機構。
デッドロック
複数処理が互いに相手の資源解放を待ち続け進行不能になる状態。
資源取得順序
複数資源を全処理で同じ順番に取得するルール。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。