[英]Is assigning to ref parameter of method an atomic operation?
我知道,例如当我们分配给字段时,分配对象引用通常是原子的。 但这在分配给ref
参数时是否成立?
void Method(ref Class1 obj)
{
var newobj = new Class1();
obj = newobj; // is this assigment an atomic and thread safe operation?
}
那取决于: Class1
真的是一个class
(或interface
或delegate
)吗? 如果是struct
:可能不是原子的(大小是影响此的主要因素); 但是, 参考更新始终是原子的; 这是语言规范所保证的。 至于“线程安全”-更复杂-它取决于其他值如何读取/写入字段。 例如,不能保证其他线程将立即注意到交换,除非它们正在执行易失性读取。
是。 分配是独立的(特别是因为您正在分配内存地址)。 您无法确定另一个线程稍后是否会立即更改变量(因此,不能确保在obj = newobj
之后直接obj == newobj
obj = newobj
),但是可以确保您的值不会被覆盖。
在诸如List<T>
情况下,您将面临这种风险,因为一个方法调用可能导致后面的多个对象更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.