[英]Is .NET DateTime thread safe
.NET DateTime線程安全嗎? 我不擔心讀取操作是否返回不正確的值,我唯一擔心的是:如果未同步,DateTime對象是否會被破壞。
對DateTime
字段的讀取和寫入不是原子的(至少在32位系統上)。
如果您同時從多個線程分配到同一屬性,則可能會損壞它。
如果從一個線程讀取並從另一個線程寫入,則讀取線程可能會損壞值。
在沒有寫入線程的情況下從多個線程讀取是安全的。
基本上,當從多個線程同時使用時, DateTime
的兩個32位半部分可能包含不同年齡的值。
你可以混合使用兩次寫入。 一次寫入的高32位部分,另一次寫入的低32位部分。
作為替代方案,您可以將Int64
用於該字段,並使用Thread
和Interlocked
原子方法對其進行處理。 然后使用new DateTime(ticks)
和dateTime.Ticks
轉換為DateTime
。
MSDN說:
此類型的所有成員都是線程安全的。 似乎修改實例狀態的成員實際上返回使用新值初始化的新實例。 與任何其他類型一樣, 必須通過鎖保護對包含此類實例的共享變量的讀寫,以保證線程安全 。
分配此類型的實例在所有硬件平台上都不是線程安全的,因為該實例的二進制表示可能太大而無法在單個原子操作中分配。
DateTime
是一個不可變的值類型(struct)。 創建后無法更改實例。
它不會被破壞並且是線程安全的。
如果要從多個線程(寫入或讀取/寫入)更改DateTime
變量 ,則需要同步 - 因為此操作不是線程安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.