デッドロックと排他制御
luagate/deadlock-introデッドロック入門25 枚データベース・SQL
上から下へ、全 25 枚そのまま並べています。
発表モードで開くデッドロックと排他制御
目次
今日のゴール
この時間で身につけてほしいことです。
- 資源の取り合いで起きる問題が分かる
- 排他制御とロックの役割が分かる
- デッドロックの仕組みをイメージできる
- 発生する4つの条件を説明できる
- 予防と回避の考え方が分かる
資源を同時に使う問題
1つの資源を複数の処理が同時に触ると、内容が壊れたり食い違ったりします。
- プリンタや残高など共有する資源がある
- 2つの処理が同時に書き込むと結果が壊れる
- 片方の更新がもう片方に上書きされる
- 順番が前後すると意図しない値になる
- だから同時利用を整理する仕組みが要る
排他制御 とは
共有する資源を、一度に1つの処理だけが使えるように調整する仕組みです。
ロック とは
資源に付ける鍵のようなものです。鍵を持つ処理だけがその資源を使えます。
第2部 取り合いが招くにらみ合い
競合状態 とは
複数の処理が同じ資源に同時に触れて、結果が実行の順番に左右される状態です。
デッドロック とは
お互いが相手の持つ資源を待ち合い、どちらも進めなくなる膠着状態です。
にらみ合いのイメージ
AはBの持つ資源を、BはAの持つ資源を待っています。どちらも譲らず止まります。
- 処理Aは資源1を持ち資源2を待つ
- 処理Bは資源2を持ち資源1を待つ
- お互いが相手の解放を待ち合う
- 待ちの輪が閉じて動けなくなる
- これがデッドロックの典型形
順調な処理とデッドロック
第3部 発生する4条件
デッドロックの4条件(前半)
次の4つがすべてそろうとデッドロックが起こり得ます。まず前半の2つです。
デッドロックの4条件(後半)
残りの2つです。4つすべてがそろって初めてデッドロックになります。
4条件のまとめ
4つの条件と、その意味を一覧にしました。どれか1つを崩せば防げます。
食事する哲学者(たとえ)
デッドロックを説明する有名なたとえ話です。フォークの取り合いで全員が止まります。
第4部 対策のしかた
対策の4つの考え方
デッドロックへの向き合い方は、大きく4つに整理できます。
予防の代表例(取得順をそろえる)
資源を取る順番を全処理で統一すると、循環待ちが起きず予防できます。
検出と回復の流れ
起きてしまった場合は、見つけて、止めて、立て直す、という流れで対処します。
待ち時間の比較(イメージ)
対策をすると、止まったまま待ち続ける時間を大きく減らせます。あくまでイメージです。
振り返りクイズ
振り返りクイズ 解答
質疑・次回予告
今日のまとめと、次に学ぶテーマです。質問があればここで受け付けます。
"
排他制御は資源の取り合いを整理する交通整理。やり方を誤ると、互いに譲らずにらみ合うデッドロックが生まれる。4つの条件のどれか1つを崩せば、にらみ合いは解けます。