IBM.comの記事によると、「競合状態とは、2 つ以上のスレッドまたはプロセスが共有データの読み取りまたは書き込みを行っている状況であり、最終的な結果は、スレッドがどのようにスケジュールされているかのタイミングによって異なります。競合状態は、予測不能な結果や微妙なプログラムのバグにつながる」. この記事は Java に関するものですが、私は一般的に同じ定義を教えられてきました。
私の知る限り、RAM からの読み取りの単純な操作は、特定の入力ライン (アドレス、読み取りなど) の状態を設定し、出力ラインの状態を読み取ることで構成されます。これは明らかに 2 つのデバイスで同時に実行することはできず、シリアル化する必要がある操作です。
ここで、いくつかのスレッドがメモリ内のオブジェクトにアクセスする状況があるとします。理論的には、競合状態を防ぐために、このアクセスはシリアル化する必要があります。ただし、たとえば、リーダー/ライター アルゴリズムでは、任意の数のリーダーが同時に共有メモリを使用できると想定しています。
ですから、問題は次のとおりです。マルチスレッド (WinAPI など) を使用する場合、読み取り用の排他ロックを実装する必要がありますか? そうでない場合、なぜですか?このコントロールはどこに実装されていますか? OS、ハードウェア?
よろしく、クバ