用于.NET的64位系统的原子读/写大小?

时间:2011-10-19 22:33:56

标签: c# .net 64-bit

C#规范说,对于32位类型和更小的(以及参考),读取和写入是原子的。因此,如果我的类中有一个Int32字段,我知道多个线程可以读取和写入它,并且它们将在运行中处于原子状态,因此值始终是一致的(尽管缓存问题是一个潜在的问题,但这不是重点这个问题)。

在64位系统上也是如此吗?如果我为64位编译我的应用程序是否意味着Int64仍然被认为不是原子的?或者我现在可以认为Int64在读/写中是原子的,因为它是在64位系统上编译并运行的吗?

1 个答案:

答案 0 :(得分:3)

它应该是相同的(不是原子的) - 值必须正确对齐以允许64位值具有原子读/写,但据我所知,不要求CLR始终对齐Int64这样的价值观。

查看How to guarantee 64-bit writes are atomic?进行一些讨论。