5

不変オブジェクトが 1 つのスレッドで新しく作成され、2 番目のスレッド (共有オブジェクトのフィールドなど) で共有される場合、2 番目のスレッドは同期されるべきではありませんか?

Thread1:
=========
 x = new SomeObject()

Thread2
=========
if (x != null)
 x.DoSomething()

x.DoSomething() の前にメモリ バリアが必要ですか? 最初のスレッドでの x への割り当てが 2 番目のスレッドから見えない可能性はありますか? .NET の安全なパブリケーション パターンは何ですか?

4

1 に答える 1

2

はい、スレッド 2 が、記述したコードで x の非 null 値を認識しない可能性があります (コードの最適化方法によって異なります)。明示的なメモリ バリアは必要ありません。x を揮発性として宣言するだけです。

于 2011-03-14T20:36:19.647 に答える