Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net CIL指令是原子指令吗?_.net_Multithreading_Cil - Fatal编程技术网

.net CIL指令是原子指令吗?

.net CIL指令是原子指令吗?,.net,multithreading,cil,.net,Multithreading,Cil,Net运行时是否保证CIL指令的原子性?如果是,它们是什么?所有CIL指令都是原子指令吗?或者它是否取决于JIT编译器生成的机器代码的原子性,因此过于特定于平台而无法做出任何保证?C#spec谈到了这一点,同样的事实也基本上适用于CIL;基本上,所有最多4字节的整数类型都保证是原子的,任何引用读/写都保证是原子的 但是,除此之外,未作出任何保证双是原子的-此处的联锁可能会有所帮助 引用(公共语言基础设施(CLI)分区I到VI) 12.6.6原子读写 合规CLI应保证: 正确读取和写入对的访问权限

Net运行时是否保证CIL指令的原子性?如果是,它们是什么?所有CIL指令都是原子指令吗?或者它是否取决于JIT编译器生成的机器代码的原子性,因此过于特定于平台而无法做出任何保证?

C#spec谈到了这一点,同样的事实也基本上适用于CIL;基本上,所有最多4字节的整数类型都保证是原子的,任何引用读/写都保证是原子的

但是,除此之外,未作出任何保证<例如,不保证代码>双是原子的-此处的
联锁
可能会有所帮助

引用(公共语言基础设施(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位不是