はじめに
自分の勉強用にデッドロックについてまとめます。
参考リンクにとてもお世話になりました!
デッドロックとは
共有資源を使用する2つ以上のプロセスが、互いに相手プロセスが必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態。
両方のプロセスが永久的な待ち状態に陥ってしまうため、処理が続行できなくなる。
デッドロックを回避するためには
以下のような対応が一般的
- アクセスする資源の順番を一貫する
- 不必要にロックをかけない
- 不必要にトランザクションを長くしない
- 不必要にFOR UPDATE(トランザクションが終了した時に更新)でロックしない
- 可能な限り行ロックを採用する(資源全体でなく、更新対象のみロック)