0

私の質問の範囲は、メモリ内のアドレスの同時読み取りと書き込み、およびハードウェアで何が起こるかに厳密に限定されています。

競合状態と、この競合が発生した値を使用してプログラムが実行を継続した後にそれらが何を運ぶかについて知りたくありません。PC のロジックが壊れている場合は、クラッシュも発生する可能性がありますが、ここで私の質問はハードウェアと、同時スレッドからの WRITE+READ の影響についてです。

質問: あるスレッドから変数を書き込み、別のスレッドから同じ変数を読み取るとします。何が起こるか?

  1. この読み取り/書き込みのインターリーブのために、後続のすべてのスレッドが間違った値を読み取るように、変数の値を破損するだけですか?

また

  1. 場合によっては、ハードウェアの何らかの違反である可能性があるため、アプリがダウンする可能性もあります。

基本的に、変数の物理的な読み取りと書き込みを同時に行うプロセスと、PC の動作についてもっと知りたいと思っています。

私は LINUX と C++ を使用しており、2 つのケースに興味があります。

  • 同じ物理コア上の 2 つのスレッド

  • 2 つの別々のコアに 2 つのスレッド

4

1 に答える 1

1

それはすべて、ハードウェアの種類と変数のサイズに依存します。多くの場合、整数へのアクセスはアトミックですが、倍精度へのアクセスは通常そうではありません。単純な小さな値でも、ハードウェアが異なれば動作が大きく異なる場合があります。ハードウェア マニュアルのコピーを取得する必要があります。この分野の一部について説明している投稿があります: 1 つのアセンブラー命令は常にアトミックに実行されますか?

ハードウェアの設計が適切でない限り、読み取りによって書き込みの動作が変わることはありませんが、読み取りが書き込みの一部を認識し、残りの部分を認識しない場合、書き込みによって読み取られる値が不正確になる可能性があります。

于 2013-03-20T00:41:24.450 に答える