在 .NET 中实现并发 HashSet 功能
.NET Framework 不直接提供并发 HashSet 实现。 然而,一些解决方法提供了类似的线程安全功能。
最优解:ConcurrentDictionary
ConcurrentDictionary<TKey, TValue>
中的 System.Collections.Concurrent
类是推荐的方法。 为了获得最佳内存使用率,请使用 byte
作为值类型。 这提供了镜像 HashSet 行为的线程安全操作,尽管使用键值结构而不仅仅是键。
<code class="language-csharp">private ConcurrentDictionary<string, byte> _data;</code>
自定义实施(高级)
您可以构建自定义的并发HashSet,通过锁等机制确保线程安全。 然而,这需要仔细考虑和彻底的测试。 请记住,即使是标准 HashSet
上的读取操作本质上也不是线程安全的。
<code class="language-csharp">using System; using System.Collections.Generic; using System.Threading; namespace BlahBlah.Utilities { public class ConcurrentHashSet<T> : IDisposable { // ... (implementation omitted for brevity) } }</code>
避免 ConcurrentBag
强烈建议不要使用ConcurrentBag<T>
。 它的线程安全操作仅限于添加和删除任意元素,这使得它不适合需要类似 HashSet 的行为的场景(例如,检查是否存在)。 它主要是为生产者-消费者模式设计的。
以上是如何在.NET Framework中实现并发HashSet?的详细内容。更多信息请关注PHP中文网其他相关文章!