32ビットプロセッサでの32ビットINT READ / WRITEの原子性に影響を与える可能性がありますか?

StackOverflow https://stackoverflow.com//questions/9715016

質問

私は、ハイパースレッディングが32ビットint(32ビットプロセッサ上)を境界に整列させても非原子を読み書きすることができることをどこかに読みました。誰もがこれをどのように影響するかを説明することができますか?

役に立ちましたか?

解決

それが真だった場合、それは特定のモデルやステッピングに特有のものであろういくつかの種類の恐ろしいCPUバグです。その32ビットの読み取りと書き込みはアトミックであり、X86プラットフォームのプロパティに基本的なもので、Windows、Linux、Lootと多くのアプリケーションソフトウェアによって依存しています。

これが、ハイパースレッディングを備えたシングルフィジカルコアCPUへのハイパースレッディングなしでシングルコアCPUからの移行を参照している可能性があることを考えることができる唯一のこと。ハイパースレッディングなしのシングルコアx86 CPUでは、整列された32ビット変数に対して読み取り修正書き込み操作を行う単一の命令(増分など)は、ロックプレフィックスなしでもアトミックです。 (それらは、ただ起こることは保証されていません。)ハイパースレッディングを持つCPUは、2つの物理コアを持つCPUのようにロットを示しているので、読み取り修正書き込み操作(その他の交換)はAtomicを使用せずにアトミックではありません。ロックプレフィックス。

あなたのソフトウェアの大多数のCPUが遭遇するので、それは無関係な区別です。したがって、整列された32ビット値に対するシングル命令読み取り修正書き込み操作でさえ、ロックされていない限り、アトミックではありません。 (プレフィックスなしでもロックされているので、Exchangeは例外です。)

他のヒント

マルチCPUシステムでも常に整列されたまたは書き込みは常に原子です。アトミックではないもの(そしてこれはおそらくあなたが聞いたこと、または少なくともあなたが聞いたべきもの)は、増分などの読み取り修正書書き込み指示またはメモリターゲットで追加されます。HTシステムでもアトミックではありませんが、ロックされていない場合でも、1つの論理CPUを持つシステムでは、それらのシステム上のシステム上のアトミック(偶然には保証ではなく)です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top