1

私は次のコードを持っていますC++擬似コード

class A
{
 private:
 B s_staticvar;

 public:
 static void doSomething()
 {
 }
}

多くのスレッドがdoSomething()を呼び出すことができます。すべてのスレッドはs_staticvarのみを読み取り、変更しません。私の質問は、静的変数を読み取る前にロックする必要があるかどうかです。

オブジェクトBの非アトミック読み取りは、同期の問題を引き起こす可能性がありますか?

4

1 に答える 1

4

複数のスレッドから安全にデータを読み取ることができます。ロックは必要ありません。これらのスレッドはお互いに気付くことさえありません。他のスレッドが開始する前に、変数を完全に準備する必要があるのはあなただけです。

マルチコア/マルチプロセッサ環境では、データの複数のコピーが異なるプロセッサのキャッシュに存在する場合があります。それらがすべて同じである限り、これは問題ではありません。

于 2012-09-07T17:42:20.667 に答える