Java vs C#和volatile 64位类型(long,double)

时间:2015-03-02 15:01:36

标签: java c# 64-bit volatile

Java保证对volatile声明的long和double的原子读/写(即使在32位环境中),而C#不会(编译错误)。为什么C#不支持这一点,Java是否在字节码级别上处理这个问题?

1 个答案:

答案 0 :(得分:-1)

  

为什么C#不支持此功能?

如果您运行的是64位CLR版本的64位系统,long and double reads and writes are guaranteed to be atomic

  

如果您在64位64位操作系统上运行C#代码   然后CLR的版本读取和写入64位双精度数和长数   整数也保证是原子的

这是根据CLI specification部分§I.12.6.6:

  

符合要求的CLI应保证读写访问权限   正确对齐的内存位置不大于本机字大小   (native int类型的大小)是原子的(参见§I.12.6.2)   写入对某个位置的访问大小相同。原子写入应该   除了写的那些之外不要改变任何比特除非明确的布局控制   (参见分区II(控制实例布局))用于改变   默认行为,数据元素不大于自然字大小   (原生int的大小)应正确对齐。宾语   引用应被视为存储在本机中   字大小。