【发布时间】:2010-12-16 08:05:35
【问题描述】:
我们从C# specification 知道引用读/写是原子的。在访问对象成员的语句中,引用也会被原子访问吗? 我认为是的,因为它也是一种隐式引用读取,编译器在为其生成代码时必须为其提供原子性。
在同一语句中,访问对象以访问其成员会导致对象引用被持有,因此在另一个线程创建新实例时不会被垃圾回收?
那么,如果我们访问链中的成员,是否也会保留最左边的对象引用,这样它就不会被其他线程垃圾收集?
考虑以下代码;
static SomeClass sharedVar;
void someMethod()
{
SomeClass someLocalVar = sharedVar.memberX.memberY.a;
operations on someLocalVar...
}
我正在寻找有关该主题的官方解释,来自 MSDN library、C# 规范等或 Microsoft 人员,以确保我没有破坏某些东西并且一切正常。
【问题讨论】:
标签: c# thread-safety atomic