C#atomicity:在x64平台上分配int与long

Sch*_*999 6 .net c# multithreading pointers thread-safety

我正在查看http://msdn.microsoft.com/en-us/library/aa691278(VS.71).aspx,其中说int的读写是原子的,而long的读写可能不是.64位平台真的如此吗?是不是IntPtr.Size == 64位还是长?我错过了什么或语言规格不够充实?

这里也有更多想法:http: //philosopherdeveloper.wordpress.com/2011/02/08/beware-assignment-atomic-assignment/

Pet*_*hie 13

long是在CPU上的原子写入具有64位字的平台.例如,如果您在64位计算机上运行32位.NET应用程序,写入long不是原子的.

请注意,如果您无法确保编译器不优化对该类型变量的访问,则原子性几乎毫无意义.例如,你不能装饰一个long领域volatile.

对64位字段的操作保证仅在64位运行时环境中是原子的

http://www.albahari.com/threading/part4.aspx

如果您在64位版本的CLR中的64位操作系统上运行C#代码,那么64位双精度和长整数的读写也保证是原子的

http://blogs.msdn.com/b/ericlippert/archive/2011/05/31/atomicity-volatility-and-immutability-are-different-part-two.aspx