是int吗? 线程安全?

我知道.Net中的所有32位类型(例如, intbool等)都是线程安全的。 也就是说,不会有部分写入(根据规范)。

但是,这同样适用于int? (可以为空)?

问题是措辞不力,因此到目前为止答案中的混乱。 问题应该是“读取和写入int类型的变量?保证是primefaces的吗?”

不,绝对不是。 关于这一点,规范非常明确:

以下数据类型的读取和写入是primefaces的:bool,char,byte,sbyte,short,ushort,uint,int,float和reference类型。 此外,在先前列表中具有基础类型的枚举类型的读取和写入也是primefaces的。 其他类型的读写,包括long,ulong,double和decimal,以及用户定义的类型,不保证是primefaces的。

线程完全可以从可空类型的共享内存变量中读取部分写入的值。

例如,假设你有一个int? 变量x,它目前的值为null。 因此它包含一个设置为零的int和一个设置为false的bool。 现在在另一个线程上,你可以将nullable int“5”写入x。 另一个线程从x读取非可空int零是完全合法的,因为bool中的“true”可以在5设置为int之前设置。

不,因为一个int? 实际上是一个由intbool组成的结构( Nullable )。

来自http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx :

此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的。 任何实例成员都不保证是线程安全的。