我正在查看 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/
最佳答案
long
是在具有 64 位字的 CPU 和平台上的原子写入。例如如果您在 64 位计算机上运行 32 位 .NET 应用程序,写入 long
将不是是原子的。
请注意,如果您不能确保编译器不会优化对该类型变量的访问,那么原子性几乎毫无意义。例如你不能用 volatile
修饰一个 long
字段。
Operations on 64-bit fields are guaranteed to be atomic only in a 64-bit runtime environment
http://www.albahari.com/threading/part4.aspx
if you are running C# code on a 64 bit operating system in a 64 bit version of the CLR then reads and writes of 64 bit doubles and long integers are also guaranteed to be atomic
关于C# 原子性 : assignment of int vs. long 在 x64 平台上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12486572/