bool
C# 规范在第 5.5 节中规定,对某些类型(即、char
、byte
、sbyte
、short
、ushort
、uint
、int
、和引用类型)的读写float
保证是原子的。
这引起了我的兴趣。你怎么能那样做?我的意思是,如果我想让读写看起来是原子的,我的个人经验只是告诉我锁定变量或使用障碍;如果每次读/写都必须完成,那将是性能杀手。然而,C# 做了类似的事情。
也许其他语言(如 Java)可以做到这一点。我真的不知道。我的问题并不是真的针对特定语言,只是我知道 C# 可以做到。
我知道它可能必须处理某些特定的处理器指令,并且可能无法在 C/C++ 中使用。但是,我仍然想知道它是如何工作的。
[编辑]说实话,我相信在某些情况下读写可能是非原子的,就像一个 CPU 可以访问一个内存位置,而另一个 CPU 正在那里写入。这是否仅在 CPU 无法一次处理所有对象时发生,例如因为它太大或因为内存未在正确的边界上对齐?