×
科目A|ソフトウェア

デッドロック | 応用情報技術者試験

デッドロックとは

デッドロックとは、複数の処理(プロセスやスレッド)が、互いに相手が占占有している資源の解放を待ち合ってしまい、どちらの処理も先に進めなくなって停止(フリーズ)してしまう現象です。マルチタスクや排他制御を行うシステムにおいて、設計上の配慮が不足していると発生することがあります。デッドロックが起きると、外部から強制終了するなどの対策をとらない限り、システムが永久に待ち状態になってしまいます。

具体例

  • お互いの鍵の掛け合い:プロセス1が「ファイルA」をロックし、プロセス2が「ファイルB」をロックしているとします。次に、プロセス1が処理を完了するために「ファイルB」を必要として待ち状態になり、同時にプロセス2も「ファイルA」を必要として待ち状態になります。両者がお互いの持っているロックの解除を待ち続けるため、どちらも動けなくなります。
  • 狭い道路でのすれ違い:車Aと車Bが、車1台分しか通れない狭い一本道で正面衝突しそうになり、お互いに「相手がバックしてくれるのを待つ」状態になり、どちらも一歩も動けなくなってしまう状況に似ています。

もう少し詳しく