.NET:给对象引用赋值是否是原子操作(即线程安全)?

7
假设我有一个变量x(类型为myClass),最初为null,现在需要进行赋值操作。
x = myObject

在某个后台线程中仅发生一次。

当从主线程访问x时,是否保证x始终包含nullmyObject?还是说在不久的将来x可能包含一些无效数据?


2
请查看这篇文章:http://msmvps.com/blogs/luisabreu/archive/2009/06/29/multithreading-hardware-atomicity.aspx - Sergey Mirvoda
2个回答

6

如果类型引用的大小与CPU的本机字长相同,则赋值将是原子性的(在您描述的情况下是安全的)。

实际上,(没有手头的参考资料),我相当确定类型引用始终与本机CPU字长相同。


4
参考文献为:CLI规范的第一部分,第12.6.6节,指出:“符合规范的CLI应保证对大小不超过本地字长的适当对齐内存位置的读写访问在所有对某个位置的写访问大小相同时是原子性的。”即使没有引用规范,你也是第一个给出正确答案的人。 - Darin Dimitrov
@Darin Dimitrov:不确定为什么您删除了您的答案,毕竟它是正确的。 - Mitch Wheat
2
我删除了我的回答,因为它没有提供任何比你的回答更有用的信息。 - Darin Dimitrov

1

this(尽管它涉及略有不同的话题)中我得出结论,赋值是原子的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接