我知道,当我们分配给字段时,分配对象引用通常是原子的。但是当我们分配给 ref
参数时,这是否成立?
void Method(ref Class1 obj)
{
var newobj = new Class1();
obj = newobj; // is this assigment an atomic and thread safe operation?
}
最佳答案
这取决于:Class1
真的是一个类
(或接口(interface)
,或委托(delegate)
)吗?如果它是一个结构:它可能是非原子的(大小是影响这一点的主要因素);然而,引用更新始终是原子的;这是由语言规范保证的。至于“线程安全” - 更复杂 - 它取决于其他值如何读取/写入该字段。例如,不能保证其他线程会立即注意到交换,除非它们正在执行 volatile 读取。
关于c# - 分配给方法的 ref 参数是原子操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26114878/