对于确定的答案,请转到规格。:)
CLI规范的第I部分,第12.6.6节指出:“符合规范的CLI必须保证对所有不超过本机字大小的正确对齐内存位置的读写访问是原子的,而对某个位置的所有写访问都相同。”
这样就可以确定s_Initialized永远不会不稳定,并且对小于32位的原始类型的读写是原子的。
特别是,
double和
long(
Int64和
UInt64) 不能
保证在32位平台上是原子的。您可以使用
Interlocked类上的方法来保护这些方法。
另外,虽然读写是原子的,但由于必须读取,操作和重写原始类型,因此存在一种竞争条件,具有加,减,递增和递减原始类型。互锁的类使您可以使用
CompareExchange和
Increment方法保护它们。
互锁会形成内存屏障,以防止处理器对读取和写入进行重新排序。在此示例中,锁创建了唯一需要的屏障。



