競合状態

競合状態は、ソフトウェアのプログラムが正しく動作するために、1つ以上のプロセスのタイミングに依存している場合に発生します。スレッドが予期しないタイミングで実行または終了すると、誤った出力やプログラムのデッドロックなど、予測できない動作が発生することがあります。

ほとんどのソフトウェアプログラムはマルチスレッドであり、複数のスレッドを同時に処理できます。適切にプログラミングされたアプリケーションは、各スレッドの結果が想定された順序で処理されるようにします。プログラムが予測できない順序で実行されるスレッドに依存していると、競合状態が発生することがあります。

簡単な例として、ブール値を処理する論理ゲートを考えてみましょう。AND論理ゲートには2つの入力と1つの出力があります。入力AとBがtrueの場合、ANDゲートはTRUEを出力します。どちらか一方または両方の入力がfalseの場合、FALSEを出力します。変数AとBが読み込まれる前にプログラムが論理ゲートの結果を確認すると、競合状態が発生することがあります。正しい処理の流れは次のとおりです。

  1. 変数Aを読み込む
  2. 変数Bを読み込む
  3. AND論理ゲートの結果を確認する

誤った順序は次のとおりです。

  1. 変数Aを読み込む
  2. AND論理ゲートの結果を確認する
  3. 変数Bを読み込む

上の2つ目の例の結果は、1つ目の例と同じになる場合もあれば、異なる場合もあります。たとえば、変数Bが読み込まれる前も後もFALSEであれば、結果は変わりません。AがFALSEの場合、BがTRUEかFALSEかは関係ありません。しかし、AとBがどちらもtrueの場合、結果はTRUEになるはずです。論理ゲートの結果を確認した後に変数Bを読み込むと、FALSEという誤った結果になります。

競合状態によって生成される一貫性のない出力は、検出が難しいバグの原因になることがあります。プログラマーは、スレッドが一貫した順序で処理されるようにすることで、これらの問題を避けられます。

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

quiz知識をテストする

What version of Mac OS X followed Leopard?

A
Tiger
0%
B
Cheetah
0%
C
Panther
0%
D
Snow Leopard
0%
Correct! Incorrect!     View the Leopard definition.
More Quizzes →

Tech Terms コンピューター辞書

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

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

Tech Terms ニュースレター

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

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

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

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

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