競合状態 【race condition】 レースコンディション

概要

競合状態(race condition)とは、電子回路やコンピュータプログラムの動作が、外部の別の要因によって左右されること。同じ資源に複数の主体が同時にアクセスした場合などに生じ、正しく動作することも誤った結果になることもある不安定な状態である。

電子回路の動作では、単一の入力が複数の経路に枝分かれして異なる論理素子を通り、再び合流するような回路で、経路の違いからが変化するタイミングにずれが生じ、結果が不安定になる現象などを競合状態という。

コンピュータプログラムの動作では、並列に実行されている複数のプログラムシステムが一つの資源(入出力装置やメモリ領域など)を操作する場合、互いの操作が不規則に入り混じって予期しない結果や動作を引き起こすことなどを競合状態という。

例えば、あるグローバル変数を読み込み、1を加算して書き戻すというプログラムマルチスレッドで2つ動作している場合、スレッドAが処理を完了する前にスレッドBがを読み込んで処理を開始してしまうと、Bの書き込みによってAの処理結果は破棄されてしまい、合わせて2加算されるはずが1しか加算されなくなってしまう。

このような状況では毎回誤った結果になるわけではなく、両者の処理のタイミングによって結果が異なる不安定な状態となるため、不具合箇所の発見や対処が難しくなる。排他制御ロック)の仕組みを適切に利用し、共有資源の処理に原子性を確保する必要がある。

(2023.10.9更新)

他の辞典による解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる