5

当一个不可变对象在一个线程中新建并在第二个线程中共享(例如作为共享对象的一个​​字段)时,第二个线程不应该同步吗?

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

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

x.DoSomething() 之前应该有内存屏障吗?是否有可能在第一个线程中对 x 的分配对第二个线程永远不可见?.NET 的安全发布模式是什么?

4

1 回答 1

2

是的,线程 2 可能永远不会在您编写的代码中看到 x 的非空值(取决于代码的优化方式)。您不需要显式的内存屏障。只需将 x 声明为 volatile。

于 2011-03-14T20:36:19.647 回答