64位cpu上的64位值的读/写操作是原子的吗?

时间:2018-10-23 23:40:34

标签: c# .net atomic 32bit-64bit

在32位计算机上,.net中对64位值的读取和写入曾经是非原子的,也就是说,在读取时,我可以读取一个从未写入内存的值,该值由一个较旧的32-一半,另一半。

  1. 但是在64位cpus上读写原子吗?
  2. 如果是,(Windows)操作系统也必须是64位吗?
  3. 如果是的话,甚至该应用程序也必须是64位.net版本吗?

1 个答案:

答案 0 :(得分:2)

this answer开始,如果您使用的是64位系统并使用64位CLR,则它们是原子的。答案引用了Eric Lippert的这篇博客文章:https://blogs.msdn.microsoft.com/ericlippert/2011/05/31/atomicity-volatility-and-immutability-are-different-part-two/

  

CLI规范实际上提供了更强有力的保证。 CLI保证读取和写入值类型的变量是原子的(或小于处理器的自然指针的大小)是原子的;如果在64位版本的CLR上的64位操作系统上运行C#代码,则对64位双精度数的读取和写入和长整数也将保证是原子的。 C#语言不能保证,但是运行时规范可以。 (如果您在某些CLI实现未实现的环境中运行C#代码,那么您当然不能依靠该保证;如果您想知道它们提供的保证,请与向您出售运行时的供应商联系。) / p>