ICDロゴ

デッドロック (deadlock)

最終更新日: 2007/05/10

 マルチタスクやマルチスレッド・システムにおいて、リソースの排他制御の問題などにより、プログラムの動作が事実上停止してしまう状態のこと。デッドロック状態に陥ってしまった場合は、プログラムが続行できなくなるので、システムにとっては致命的な状態といえる。deadlockとは「行き詰まる」「こう着状態」などという意味を持つ。

 例えば、あるプログラム1と2があり、それぞれが共有リソースAとBを利用する例を考える。プログラム1はリソースAを確保後、リソースBを確保する。逆にプログラム2はリソースBを確保後、リソースAを確保するものとする。この2つのプログラムを同時に起動すると、まずプログラム1はリソースAを確保し、プログラム2はリソースBを確保する。この時点でリソースAもBもそれぞれのプログラムから確保済みである。そして次にプログラム1がリソースBを確保しようとしても、すでにプログラム2によって確保済みなので、それが解放されるまで待たされることになる。一方、プログラム2はリソースAを確保しようとするが、すでにプログラム1によって確保済みなので、やはり待たされることになる。この結果、両方のプログラムがお互いに解放されることのないリソースを待ち続ける状態になる。これがデッドロック状態である。

 デッドロックは、複数の共有リソースを排他制御しながら利用するプログラム同士が、すでに確保済みのリソースを要求することによって引き起こされる。デッドロック状態を解消するには、確保済みのリソースを強制的に解放したり、いずれかのプログラムを強制終了させたりする必要がある。

Copyright (C) 2000-2007 Digital Advantage Corp.

アイティメディアの提供サービス

キャリアアップ