2011-07-01 1 views
1

マルチプロセッサ設定と同じメモリにアクセスする2つのスレッドがある場合(「同じ領域」だけでなく同じ実際のバイトまたはワードとも言えます)、エラーが単独で発生しますか?メモリへの同時READ/WRITEアクセスによって、エラー/違反が発生しますか?

2つのスレッドが読み取りだけでなく、書き込みと読み取りと書き込みを組み合わせている場合(たとえば、スレッド1はスレッド2が書き込みしようとしていると同時に読み込みを試みます。同時)。これはエラー/ BSOD/AVを引き起こすのでしょうか、または動作が未定義である唯一の問題でしょうか? (実際のタイミングに依存して、スレッドの1つが間違ったデータを取得する)

+1

物理的に1度に1つのメモリ操作しか存在しないため、コンピュータを破壊することはありません。 2つのプロセスが読み込みを終了させ、アクセスを同期させないとメモリの最終的な値がどのようになるかは予測できません。 –

+0

私はコンピュータが壊れないと知っています;)、これが起こっている間にスレッド(またはその両方)のうちの1つがエラーを出して終了する可能性がありますか? – Cray

+1

いいえ。すべての操作が正常に実行されますが、結果は予測できません。 –

答えて

0

1)いいえ、スレッドはプログラムアプリケーションのメモリのあらゆる場所で自由に読み書きできます。 (OK、それを保護するためにプログラムコードメモリのようなメモリの一部を保護することは可能です)。2)CPUコアには独自のキャッシュがあり、コピーされた後にキャッシュラインで変更されます。適切な(予測不可能な)時間をRAMに戻します。アトミック(interlocked)RAMの読み取り、書き込み、または変更を確実にするために、他の命令(cmpxchgなど)と一緒に実行する必要がある特別なCPU命令(ロックなど)があります。

注意:アトミック(インターロック)RAMアクセスは、1,2,4または8(および64ビットCPUの下位16ビット)バイトに限ります。 メモリ構造を長くする場合は、複数のスレッドによる制御されていないメモリアクセスを避けるために、対応するロック(sinhronisation)メカニズムをCritical Sectionのようにする必要があります。

関連する問題