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

Phi*_*ght 6 .net c# 64-bit

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

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

Ale*_*kov 3

它应该是相同的(不是原子的)——值必须正确对齐才能允许 64 位值进行原子读/写,但据我所知,CLR 并不要求始终以Int64这种方式对齐值。

查看如何保证 64 位写入是原子的?对此进行一些讨论。