编程语言
首页 > 编程语言> > C#-访问对象成员和原子性

C#-访问对象成员和原子性

作者:互联网

>从C# specification中我们知道引用读/写是原子的.在访问对象成员的语句中,引用也会被原子访问吗?
我认为是的,因为它也是一种隐式引用读取,编译器在为其生成代码时必须提供原子性.
>在同一条语句中,访问对象以访问其成员是否会导致对象引用被保留,以便在另一个线程创建新实例时不会对其进行垃圾回收?
>那么,如果我们访问链中的成员,是否还会保留最左边的对象引用,这样它就不会被其他线程垃圾收集?

考虑下面的代码;

static SomeClass sharedVar;

void someMethod()
{
    SomeClass someLocalVar = sharedVar.memberX.memberY.a;
    operations on someLocalVar...
}

我正在从MSDN library,C#规范等中寻求有关该主题的官方解释,或者是Microsoft人士,以确保我没有破坏任何东西并且一切都很好.

解决方法:

>是的,所有参考读物都是原子的.
>在字段读取操作期间,从将值压入堆栈直到.ldfld命令完成,才可以收集引用.否则,它将允许CLR收集您正在使用的对象.让另一个线程创建该值的实例与该问题无关.
>我不确定这最后一点是什么意思,但是我认为您过于担心垃圾回收.当您仍在使用它时,CLR不会删除它.

标签:atomicity,thread-safety,c
来源: https://codeday.me/bug/20191210/2101545.html