.NET DateTime线程是否安全

.NET DateTime线程安全吗? 我不担心读取操作是否返回不正确的值,我唯一担心的是:如果未同步,DateTime对象是否会被破坏。

DateTime字段的读取和写入不是primefaces的(至少在32位系统上)。

  • 如果您同时从多个线程分配到同一属性,则可能会损坏它。

  • 如果从一个线程读取并从另一个线程写入,则读取线程可能会损坏值。

  • 在没有写入线程的情况下从多个线程读取是安全的。

基本上,当从多个线程同时使用时, DateTime的两个32位半部分可能包含不同年龄的值。

你可以混合使用两次写入。 一次写入的高32位部分,另一次写入的低32位部分。

作为替代方案,您可以将Int64用于该字段,并使用ThreadInterlockedprimefaces方法对其进行处理。 然后使用new DateTime(ticks)dateTime.Ticks转换为DateTime

MSDN说:

此类型的所有成员都是线程安全的。 似乎修改实例状态的成员实际上返回使用新值初始化的新实例。 与任何其他类型一样, 必须通过锁保护对包含此类实例的共享变量的读写,以保证线程安全

分配此类型的实例在所有硬件平台上都不是线程安全的,因为该实例的二进制表示可能太大而无法在单个primefaces操作中分配。

DateTime是一个不可变的值类型(struct)。 创建后无法更改实例。

它不会被破坏并且是线程安全的。

如果要从多个线程(写入或读取/写入)更改DateTime 变量 ,则需要进行同步 – 因为此操作不是线程安全的。