.net CIL指令是原子指令吗?
Net运行时是否保证CIL指令的原子性?如果是,它们是什么?所有CIL指令都是原子指令吗?或者它是否取决于JIT编译器生成的机器代码的原子性,因此过于特定于平台而无法做出任何保证?C#spec谈到了这一点,同样的事实也基本上适用于CIL;基本上,所有最多4字节的整数类型都保证是原子的,任何引用读/写都保证是原子的 但是,除此之外,未作出任何保证<例如,不保证代码>双是原子的-此处的.net CIL指令是原子指令吗?,.net,multithreading,cil,.net,Multithreading,Cil,Net运行时是否保证CIL指令的原子性?如果是,它们是什么?所有CIL指令都是原子指令吗?或者它是否取决于JIT编译器生成的机器代码的原子性,因此过于特定于平台而无法做出任何保证?C#spec谈到了这一点,同样的事实也基本上适用于CIL;基本上,所有最多4字节的整数类型都保证是原子的,任何引用读/写都保证是原子的 但是,除此之外,未作出任何保证双是原子的-此处的联锁可能会有所帮助 引用(公共语言基础设施(CLI)分区I到VI) 12.6.6原子读写 合规CLI应保证: 正确读取和写入对的访问权限
联锁
可能会有所帮助
引用(公共语言基础设施(CLI)分区I到VI)
12.6.6原子读写
合规CLI应保证:
正确读取和写入对的访问权限
对齐的内存位置不大于
比本机单词大小(的大小
类型native int)是原子的(请参见
§12.6.2)当所有写访问
到一个位置的大小相同。
原子写入不会改变任何位
除了那些书面的。除非
显式布局控件(请参见
分区II(控制实例)
布局)用于更改默认值
行为,数据元素没有变大
比自然单词的大小(大小)
本机int)的
对齐的。对象引用应为
将其视为存储在
本机字号
[注:有
原子更新没有保证
内存的(读-修改-写),但
用于为此目的提供的方法
作为类库的一部分(请参见
第四分区)。一个原子对
―小数据项‖(不大于
超过本机字号)是必需的
在上执行原子读取/修改/写入
不支持直接连接的硬件
写入小数据项。结束注释]
[注:没有保证的原子质量
当
本机int为32位,即使
某些实现可能会执行以下操作:
当数据丢失时的原子操作
在8字节边界上对齐。结束
注]
由于
native int
必须至少为32位,这是它所能提供的最大保证。什么是“native int”?C/C++定义的int
?它的最小大小为16位,而不是32位。当然,这与问题无关。:)+哥查。我不知道CLI规范定义了“本机int”。)嗯,我的结论正确吗?附加注释基本上意味着没有绝对的保证(除了阅读)。NET允许32位int写入,而不是在int大小为64位且没有直接32位写入功能的平台上进行原子写入,对吗?因此,这只是在特定平台的上下文中的一种保证。@John 32位int等在语言规范中是保证原子的;64位不是