在大多数情况下double,decimal64位系统上的类型更新是原子操作,因为这些类型是64位.(十进制是128位,所以这是错误的,感谢您的评论)
但是当我更新double?并decimal?输入64位系统时它会是原子的吗?什么是大小double?和decimal?
我知道原子性并不能保证,尽管我仍然感兴趣,如果这种更新在一般情况下是原子的.
Jon*_*eet 11
在大多数情况下,64位系统上的双重和十进制类型更新是原子操作,因为这些类型是64位.
不,decimal是128位开始.另请注意,在64位计算机上运行并不一定意味着您正在运行64位CLR.目前还不清楚你的"系统"是什么意思.
所以你甚至不应该假设原子性decimal.即使在64位CLR上,我也不想依赖于原子性double,部分原因在于它取决于对齐.C#规范明确指出(C#4规范的第5.5节):
其他类型的读写,包括long,ulong,double和decimal,以及用户定义的类型,不保证是原子的.
所以这使得可空的一面有点无意义,但......
但是当我更新双倍?和十进制?64位系统上的类型是原子的吗?双倍的大小是多少?和十进制?
Nullable<T>基本上是一个T领域和一个bool领域.因此存储将超过64位double,并且超过128位decimal.确切的存储很可能取决于上下文,但基本上我不希望这些类型的操作具有原子性.
正如其他人所说,你几乎肯定不想依赖任何不能保证的东西.就个人而言,我几乎总是试图避免一般的无锁编码.尝试使用CLR/BCL团队提供的更高级别的抽象,并证明是安全的.
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |