プログラム システム停止の罠!デッドロックを理解する
- デッドロックとは複数のプログラムが同時に動作するコンピュータの世界では、プログラムはそれぞれが作業を進めるために必要な資源(データや処理能力など)を利用します。しかし、複数のプログラムが必要な資源を互いに握ったまま、相手に譲らず待ってしまう状態が発生することがあります。これが「デッドロック」と呼ばれる現象です。デッドロックは、例えるなら、交差点で車が同時に進入し、譲り合いの結果、身動きが取れなくなってしまう状況に似ています。どの車も交差点を通過するために、他の車が道を譲る必要がありますが、どの車も譲ろうとしないため、膠着状態に陥ってしまうのです。プログラムの世界では、この「車」は「プロセス」に、「交差点」は「共有資源」に置き換えられます。例えば、二つのプログラムAとBがあるとします。プログラムAはデータXを使用するためにロックをかけ、その後データYを使おうとします。同時に、プログラムBはデータYをロックし、その後データXを使おうとします。この時、プログラムAはプログラムBがデータYを解放するのを待ち、プログラムBはプログラムAがデータXを解放するのを待つ状態になります。このように、お互いに相手が資源を解放するのを待ち続ける状態がデッドロックであり、放置すると永遠に処理が進まなくなる可能性があります。デッドロックはシステムの処理能力を著しく低下させるため、プログラム設計の段階でデッドロックが発生しないように注意深く設計する必要があります。
