デッドロックとは
デッドロックとは、複数のプロセスやスレッドが共有資源を取り合い、互いに相手の解放を待ち続けるため処理が進まなくなる状態です。一度起こると全員が待機し続け、プログラムやシステムの一部が止まったように見えます。
たとえば、プロセスAがファイル1を保持したままデータベースを待ち、プロセスBがデータベースを保持したままファイル1を待つと、どちらも先に進めません。狭い通路で互いに道を譲らず立ち往生している場面を思い浮かべるとイメージしやすいでしょう。
発生の背景には、資源を同時に排他的に使うこと、途中で資源を取り上げられないこと、待ち関係が輪になることなどがあります。対策の基本は、資源を取得する順番を全プロセスで統一することです。ほかにも、一定時間で待ちを諦めるタイムアウト、検出して一方の処理をやり直す手法、同時に確保できる資源数の制限などがあります。
デッドロックの理解は並行処理の安全設計に直結します。小さなプログラムでもロックやトランザクションを使うと起こり得ます。仕様段階で対策を織り込み、運用では監視とログで兆候を捉えることが、安定したシステム運用につながります。

