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