.NET 中的執行緒安全雜湊集替代品
本文探討了在 .NET 中管理 HashSet
集合的線程安全方法,提供了手動鎖定的替代方案。 您的範例在 HashSet
操作周圍使用自訂鎖定,這是一種有效但可能容易出錯的方法。 讓我們看看更好的選擇。
.NET
框架在 ConcurrentDictionary
命名空間中提供 System.Collections.Concurrent
類別作為卓越的解決方案。 ConcurrentDictionary
提供執行緒安全的雜湊表功能,有效處理並發讀寫。 使用方法如下:
<code class="language-csharp">private ConcurrentDictionary<string, byte[]> _data;</code>
或者,您可以建立自訂 ConcurrentHashSet
類別。這種方法涉及內部鎖定機制來保證線程安全。 下面提供了範例實作:
<code class="language-csharp">public class ConcurrentHashSet<T> : IDisposable { private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); private readonly HashSet<T> _hashSet = new HashSet<T>(); public bool Add(T item) { ... } //Implementation as in original example public void Clear() { ... } //Implementation as in original example public bool Contains(T item) { ... } //Implementation as in original example public bool Remove(T item) { ... } //Implementation as in original example public int Count { ... } //Implementation as in original example public void Dispose() { ... } //Implementation as in original example protected virtual void Dispose(bool disposing) { ... } //Implementation as in original example ~ConcurrentHashSet() { ... } //Implementation as in original example }</code>
(注意:...
表示為簡潔起見,應在此處插入原始範例中的程式碼)。
與手動鎖定相比,使用 ConcurrentDictionary
或實作良好的 ConcurrentHashSet
可以顯著提高程式碼清晰度並降低同步錯誤的風險。 這些內建解決方案針對效能和線程安全性進行了最佳化。
以上是如何在.NET中實作執行緒安全的HashSet操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!