デッドロック

デッドロックとは、プログラムが処理を続けるために必要なリソースにアクセスできない状態です。アクティブなアプリケーションがデッドロックに陥ると、「ハング」したり、応答しなくなったりすることがあります。

保存されたデータやキャッシュされたデータなどのリソースは、プログラム内の特定のプロセスからアクセスされたときにロックされることがあります。データをロックすると、ほかのプロセスがデータを早まって上書きするのを防げます。プロセスやクエリがロックされたデータにアクセスする必要があるのに、そのデータをロックしているプロセスがロックを解除しない場合、デッドロックが発生することがあります。

たとえば、次の状況では2つのプロセス間でデッドロックが発生します。

  • プロセス1がプロセス2にリソースBを要求する。
  • プロセス2の実行中は、リソースBがロックされている。
  • プロセス2は実行を完了するために、プロセス1のリソースAを必要とする。
  • プロセス1の実行中は、リソースAがロックされている。

その結果、プロセス1とプロセス2は互いの処理が完了するのを待つことになります。どちらのプロセスも、もう一方のプロセスが完了するまで処理を続けられないため、デッドロックが発生します。

デッドロックの回避

開発者は、プログラムのロジックでロックが発生する状況を避けることにより、デッドロックを防止できます。たとえば、2つのプロセスが互いに依存するのではなく、別のスレッドがリソースを必要とする前に各スレッドの処理が完了するようにソースコードを記述できます。必要なときにデータへアクセスできるようにすることで、プログラマーはアプリケーションがハングしたりクラッシュしたりするのを防げます。

NOTE: 2つ以上のクエリをデータベースで実行したときにも、デッドロックが発生することがあります。トランザクションデータベースはアクティブなレコードをロックし、ほかのクエリがそのレコードにアクセスできないようにします。プロセスがロックされたレコードにアクセスできない場合、データベースのデッドロックが発生することがあります。

更新日 January 18, 2020 著者: Per C.

quiz知識をテストする

What programming language supports the "struct" data type?

A
C
0%
B
PHP
0%
C
JSP
0%
D
HTML
0%
Correct! Incorrect!     View the Struct definition.
More Quizzes →

Tech Terms コンピューター辞書

このページのデッドロックの定義は、TechTerms.comの著者が執筆したオリジナルの定義です。このページを参照または引用する場合は、定義の直下にある緑色の引用バーをご利用ください。

私たちの目標は、コンピューター用語をわかりやすく説明することです。すべての定義において正確さとわかりやすさを追求しています。フィードバックや新しい技術用語の提案がある場合は、お問い合わせください

Tech Terms ニュースレター

毎日または毎週のニュースレターで技術知識を高めましょう!今すぐ購読して、新しい用語やクイズをメールでお受け取りください。

無料のTechTermsニュースレターに登録する

メールの受信頻度を選択してください

各メールのリンクから、いつでも登録解除または頻度変更ができます。 ご質問はこちらからお問い合わせください。

注意:ニュースレターは英語で配信されます。