是否需要在C#中跨内存屏障访问不可变对象?

时间:2011-03-14 20:27:45

标签: c# memory immutability barrier

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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