Jer*_*emy 24 .net c# int thread-safety
我知道,在.net所有32位类型(如int
,bool
等)是线程安全的.也就是说,不会有部分写入(根据规范).
但是,同样适用于int?
(可空的int)吗?
Eri*_*ert 43
问题是措辞不力,因此到目前为止答案中的混乱.问题应该是"读取和写入int类型的变量?保证是原子的?"
不,绝对不是.关于这一点,规范非常明确:
以下数据类型的读取和写入是原子的:bool,char,byte,sbyte,short,ushort,uint,int,float和reference类型.此外,在先前列表中具有基础类型的枚举类型的读取和写入也是原子的.其他类型的读写,包括long,ulong,double和decimal,以及用户定义的类型,不保证是原子的.
线程完全可以从可空类型的共享内存变量中读取部分写入的值.
例如,假设你有一个int?变量x,目前的值为null.因此它包含一个设置为零的int和一个设置为false的bool.现在在另一个线程上,你可以将nullable int"5"写入x.另一个线程从x读取非可空int零是完全合法的,因为bool中的"true"可以在将5设置为int之前设置.
Ant*_*hyy 12
不,因为a int?
实际上是Nullable<int>
由a int
和a 组成的struct()bool
.
归档时间: |
|
查看次数: |
12064 次 |
最近记录: |