Java保证对volatile声明的long和double的原子读/写(即使在32位环境中),而C#不会(编译错误)。为什么C#不支持这一点,Java是否在字节码级别上处理这个问题?
答案 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的大小)应正确对齐。宾语 引用应被视为存储在本机中 字大小。