これは複雑な質問です。答える前によく考えてください。
この状況を考えてみましょう。2 つのスレッド (リーダーとライター) が 1 つの global にアクセスしますint
。これは安全ですか?普段なら何も考えずに答えます、はい!
しかし、ハーブ・サッターはそうは考えていないように私には思えます。効果的な並行性に関する彼の記事では、欠陥のあるロックフリー キューと修正されたバージョンについて説明しています。
最初の記事の最後と 2 番目の記事の最初で、彼はめったに考慮されない変数の特性である書き込み順序について説明しています。Int はアトミックで優れていますが、int は必ずしも順序付けられているわけではなく、上記のシナリオを含むロックフリー アルゴリズムを破壊する可能性があります。現在および将来のすべてのプラットフォームで正しいマルチスレッド動作を保証する唯一の方法は、アトミック (別名メモリ バリア) またはミューテックスを使用することであることに完全に同意します。
私の質問; 書き込みの再オーダリングは、実際のハードウェアで問題になることはありますか? それとも、マルチスレッドのパラノイアは衒学的なだけですか?
従来のユニプロセッサ システムはどうでしょうか。
組み込みの power-pc のような単純な RISC プロセッサはどうですか?
明確化: ハードウェア (プロセッサ/キャッシュ) の変数書き込みの並べ替えについて Sutter 氏が述べたことにもっと興味があります。オプティマイザがコンパイラ スイッチを使用してコードを壊したり、コンパイル後のアセンブリを手作業で検査したりするのを防ぐことができます。ただし、ハードウェアが実際にコードを台無しにする可能性があるかどうかを知りたいです。