共用方式為


集合和同步處理 (執行緒安全)

根據預設,System.Collections 和相關命名空間中的類別都不具備執行緒安全。多個讀取器 (Reader) 可以放心讀取集合;然而,對集合的任何修改會為所有存取集合的執行緒 (包括讀取器執行緒) 產生未定義的結果。

您可以使用下列任一種方法,讓 System.Collections 類別具備執行緒安全:

  • 使用 Synchronized 方法建立安全執行緒包裝函式,並透過該包裝函式獨佔存取集合。

  • 如果類別沒有 Synchronized 方法,則從類別來衍生,並使用 SyncRoot 屬性來實作 Synchronized 方法。

  • 存取集合時,請對 SyncRoot 屬性使用鎖定機制,例如 C# 的 lock 陳述式 (在 Visual Basic 中是 SyncLock,在 C++ 中則是 Monitor 類別)。

實作 Synchronized 方法時,衍生類別 (Derived Class) 必須覆寫 IsReadOnly 屬性,才能傳回正確的值。

Array 類別不包含 Synchronized 方法,而且即使它有 SyncRoot 屬性,亦無法從中衍生此類別。因此,陣列只有透過鎖定機制才可以變成具備執行緒安全。

泛型集合類別不含同步成員;然而,有些泛型類別像是 CollectionDictionaryList 等,會明確地實作繼承自非泛型 ICollection 介面的同步成員。

請參閱

參考

System.Collections
System.Collections.Specialized
System.Collections.Generic

其他資源

建立和操作集合