マルチコアシステム用のシンプルなマルチスレッドアプリがあります。このアプリには、特定のメモリアドレスに書き込むスレッドがない並列領域がありますが、同時に読み取るスレッドもあります。
ロックが使用されていない場合でも、同じメモリにアクセスする複数のスレッドに関連するある種のオーバーヘッドまたはパフォーマンスの低下はありますか?もしそうなら、なぜですか?それはどれほど大きな影響を与えることができ、それに対して何ができるでしょうか?
マルチコアシステム用のシンプルなマルチスレッドアプリがあります。このアプリには、特定のメモリアドレスに書き込むスレッドがない並列領域がありますが、同時に読み取るスレッドもあります。
ロックが使用されていない場合でも、同じメモリにアクセスする複数のスレッドに関連するある種のオーバーヘッドまたはパフォーマンスの低下はありますか?もしそうなら、なぜですか?それはどれほど大きな影響を与えることができ、それに対して何ができるでしょうか?
これは、使用している特定のキャッシュ同期プロトコルに依存する可能性がありますが、ほとんどの最新のCPUは、キャッシュラインへの書き込みアクティビティがない場合、複数のプロセッサキャッシュで同じキャッシュラインを共有することをサポートします。とはいえ、割り当てをキャッシュラインサイズに合わせてください。そうしないと、書き込まれているデータが読み取り専用データと同じキャッシュラインを共有し、汚れたキャッシュラインが他のプロセッサでフラッシュされたときにパフォーマンスが低下する可能性があります(偽共有)。
ないだろうと思います。ただし、同じ参照への複数のライターがある場合に問題が発生します。