快速提问。是低于分配原子:
object [] table = new object[10]
...
table[3] = 10; //is it atomic ?
...
Run Code Online (Sandbox Code Playgroud)
是的,赋值是原子的,因为 object 是引用类型。
正如下面引用的 MSDN 写的那样,对于大多数(不是全部)内置值类型(如下所述)和引用类型而言,它们是原子的。CLI 保证读取和写入处理器自然指针大小(或更小)的值类型变量是原子的;如果您在 64 位版本的 CLR 中的 64 位操作系统上运行 C# 代码,那么读取和写入 64 位双精度和长整数也保证是原子的。C# 语言不能保证这一点,但运行时规范可以。
MSDN 说什么
以下数据类型的读取和写入是原子的:bool、char、byte、sbyte、short、ushort、uint、int、float 和引用类型。此外,具有前面列表中的基础类型的枚举类型的读取和写入也是原子的。其他类型的读取和写入,包括 long、ulong、double 和 decimal,以及用户定义的类型,不保证是原子的。除了为此目的设计的库函数外,无法保证原子读-修改-写,例如在递增或递减的情况下。
可以在这里看到埃里克本人的非常详细的回答