競合状態の定義: 競合状態または競合ハザードは、システムまたはプロセスの欠陥であり、プロセスの出力または結果が、他のイベントのシーケンスまたはタイミングに予期せず決定的に依存します。
次の擬似コードを検討してください。
Global variable i initialized to 6;
Thread 1:
acquire(lock l)
increment global variable i, i.e. i++;
Thread 2:
acquire(lock l)
double the value of global var i, i.e.: i*=2;
T1 が最初にロック l を取得し、T2 が 2 番目にロック l を取得した場合、i の値は 14 になります。一方、T2 が最初にロック l を取得し、T1 が 2 番目にロック l を取得した場合、i の値は 13 になります。
それで、これは競合状態ですか?
更新: 多数のコメントと回答の後、意見はまだ分かれています。私の意見は、「はい、これは競合状態です」というカテゴリです。実際、別の質問で、この例を競合状態の状況として示しました。同時に、「いいえ、これは競合状態ではありません」というカテゴリでいくつかの興味深いコメントも読みました。問題を見る視点/レベルに応じて、これが競合状態であるかどうかにかかわらず、解決して結論づけると思います。ただし、興味深い回答/コメントをまだ待っています。