当一个线程中新增一个不可变对象,并在第二个线程中共享(比如作为共享对象的一个字段)时,第二个线程不应该同步吗?
Thread1:
=========
x = new SomeObject()
Thread2
=========
if (x != null)
x.DoSomething()
x.DoSomething()之前是否应该有内存屏障?是否有可能第一个线程中的x分配对第二个线程永远不可见? 什么是.NET的安全发布模式?
答案 0 :(得分:2)
是的,线程2可能永远不会使用您编写的代码看到x的非空值(取决于代码的优化方式)。您不需要明确的内存屏障。只需将x声明为volatile。