本文へスキップ

デッドロックとは?

でっどろっく

デッドロックとは、複数プロセスやトランザクションが互いに相手のリソース解放を待ち合い、永遠に処理が進まなくなる状態のことです。

デッドロック(Deadlock)とは、2つ以上のプロセスまたはトランザクションが、それぞれ相手が保持しているリソースを待ち続けることで、どちらも処理を進められなくなる「膠着状態」のことを指します。コンピュータ科学の並行処理・データベースオペレーティングシステムの分野で重要な概念です。

デッドロックが発生する典型的なシナリオは次の通りです。

  • トランザクションAがテーブルXをロックし、テーブルYのロック待ち
  • 同時にトランザクションBがテーブルYをロックし、テーブルXのロック待ち
  • 結果として両者が永遠に待ち続ける

デッドロックの発生条件は「コフマン条件」と呼ばれ、相互排除・占有と待機・非横取り・循環待機の4条件がすべて成立したときに起こります。データベース(MySQLなど)では検出機構が組み込まれており、デッドロックを検知するといずれか一方のトランザクションを自動的にロールバック(犠牲者選択)して解消します。

予防策としては、複数テーブルへのアクセス順序を統一する、トランザクションを短く保つ、適切なインデックスを設定してロック範囲を最小化するといった手法が取られます。OSやデータベースのログにはデッドロック発生が記録されるため、定期的なモニタリングが推奨されます。

使い方・例文

ECサイトでユーザーAが在庫テーブルを更新中に注文テーブルをロックしようとし、同時にユーザーBが逆の順序でロックを取ろうとした場合にデッドロックが起きることがあります。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語