【发布时间】:2012-11-14 03:33:54
【问题描述】:
在大多数情况下,64 位系统上的 double 和 decimal 类型更新是原子操作,因为这些类型是 64 位的。 (十进制是 128 位,所以这是错误的,感谢 cmets)
但是当我在 64 位系统上更新 double? 和 decimal? 类型时,它会是原子的吗? double?和decimal?的大小是多少
我了解原子性无法保证,但我仍然对此类更新在一般情况下是否为原子性感兴趣。
【问题讨论】:
-
在讨论原子性的任何情况下,关键什么是保证。如果(如您所说)不能保证原子性,那么坦率地说这就是讨论的结束。任何过去没有意义和无关紧要的东西:你不能相信它,所以不要使用它。
-
.NET 中的
Decimal是 128 位,而不是 64 位。因此,在 64 位系统上更新decimal是不是原子的。 -
从技术上讲,即使更新到
double也无法保证。我可能会使用Interlocked来谈甚至是那个 - 或者lock等等。 -
@MarcGravell 不同意。使用特定操作系统和特定框架版本和特定应用程序在我的服务器上保证原子性。如果这是我要使用应用程序的唯一场景,为什么不从原子性中受益?
-
@javapowered 是谁给你保证的?您不会在语言规范中找到它。你的意思是:“我推断这没问题” - 那是不是保证