.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中文网其他相关文章!