c# - 分配给方法的 ref 参数是原子操作吗?

标签 c# multithreading thread-safety

我知道,当我们分配给字段时,分配对象引用通常是原子的。但是当我们分配给 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/

相关文章:

c# - 为什么在计时器中绘画会导致应用程序变得无响应

c# - 点后只保留两位小数

objective-c - zlib:线程安全的zalloc和zfree在C中?

java - 让主线程等待,直到新的单线程在java中完全执行

c# - C#中如何查看AutoResetEvent或ManualResetEvent的阻塞状态?

c# - 如何以线程安全的方式关闭表单(从后台线程使用)?

c# - 使用 Newtonsoft JSON 的 ObjectCreationHandling 的说明?

java - 同步多个线程写入java中的同一个文件

c# - 原始并发读写的线程安全

c# - 我需要等待回调吗?