繁体   English   中英

给方法的ref参数赋原子操作?

[英]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 (或interfacedelegate )吗? 如果是struct :可能不是原子的(大小是影响此的主要因素); 但是, 参考更新始终是原子的; 这是语言规范所保证的。 至于“线程安全”-更复杂-它取决于其他值如何读取/写入字段。 例如,不能保证其他线程将立即注意到交换,除非它们正在执行易失性读取。

是。 分配是独立的(特别是因为您正在分配内存地址)。 您无法确定另一个线程稍后是否会立即更改变量(因此,不能确保在obj = newobj之后直接obj == newobj obj = newobj ),但是可以确保您的值不会被覆盖。

在诸如List<T>情况下,您将面临这种风险,因为一个方法调用可能导致后面的多个对象更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM