数组是否在C#中写入原子?

时间:2017-06-29 02:24:25

标签: c# arrays atomic

index_table.html

我知道在C#中定义了一些atmoic类型,我无法找到数组。

  1. 操作1类似于指针重新分配。可以 保证是atmoic?
  2. 操作2怎么样?

2 个答案:

答案 0 :(得分:4)

操作1是原子的。操作2不是。来自the spec

  

5.5变量引用的原子性

     

以下数据类型的读写是原子的:bool,char,byte,sbyte,short,ushort,uint,int,float和reference类型。此外,在先前列表中具有基础类型的枚举类型的读取和写入也是原子的。其他类型的读写,包括long,ulong,double和decimal,以及用户定义的类型,都不能保证是原子的。

数组是引用类型。变量ab是引用,因此操作1是引用赋值:对引用变量的简单写入,因此包含在内。操作2 看起来像bool的简单写入,也包括在内,但不要忘记数组中的索引查找。数组写入本身原子,但是当您包含查找(解除引用a[1])时,涉及两个单独的操作。

答案 1 :(得分:-1)

也许我不对,但是在我看来a[1]=true;操作不是原子的, =true根据规格看起来像是原子的,但是在总体(a[1]=true;)操作期间,我们需要从数组中获取1个元素,然后将其设置为true

的值