簡體   English   中英

.NET DateTime線程是否安全

[英]Is .NET DateTime thread safe

.NET DateTime線程安全嗎? 我不擔心讀取操作是否返回不正確的值,我唯一擔心的是:如果未同步,DateTime對象是否會被破壞。

DateTime字段的讀取和寫入不是原子的(至少在32位系統上)。

  • 如果您同時從多個線程分配到同一屬性,則可能會損壞它。

  • 如果從一個線程讀取並從另一個線程寫入,則讀取線程可能會損壞值。

  • 在沒有寫入線程的情況下從多個線程讀取是安全的。

基本上,當從多個線程同時使用時, DateTime的兩個32位半部分可能包含不同年齡的值。

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

作為替代方案,您可以將Int64用於該字段,並使用ThreadInterlocked原子方法對其進行處理。 然后使用new DateTime(ticks)dateTime.Ticks轉換為DateTime

MSDN說:

此類型的所有成員都是線程安全的。 似乎修改實例狀態的成員實際上返回使用新值初始化的新實例。 與任何其他類型一樣, 必須通過鎖保護對包含此類實例的共享變量的讀寫,以保證線程安全

分配此類型的實例在所有硬件平台上都不是線程安全的,因為該實例的二進制表示可能太大而無法在單個原子操作中分配。

DateTime是一個不可變的值類型(struct)。 創建后無法更改實例。

它不會被破壞並且是線程安全的。

如果要從多個線程(寫入或讀取/寫入)更改DateTime 變量 ,則需要同步 - 因為此操作不是線程安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM