【问题标题】:What thread-safe collection is appropriate for this scenario?哪种线程安全集合适合这种情况?
【发布时间】:2011-12-15 07:06:54
【问题描述】:

我有一个单例类处理来自在不同线程中运行的不同客户端的订阅和取消订阅请求。单例包含订阅者的集合。在添加或删除之前,该类需要验证该元素尚未被添加或删除。

通常我会在每个操作之前使用 List 或 HashSet 调用 Contains 来实现这一点,但如果我想使用 System.Collections.Concurrent 命名空间中的新类之一,我看到的唯一选择是使用 ConcurrentDictionary具有虚拟值。

这是我最好的选择还是我忽略了什么?顺便说一句,性能并不是真正需要考虑的因素。

【问题讨论】:

    标签: .net collections thread-safety


    【解决方案1】:

    我认为你应该坚持ConcurrentDictionary ...

    【讨论】:

    • "与套装不同,包支持重复。"与“在添加或删除之前,该类需要验证该元素尚未添加或删除。”
    【解决方案2】:

    为什么不使用阻塞队列支持的 ConcurrentDictionary。 BlockingQueue 似乎适合您的生产者/消费者方案,而 ConcurrentDictionary 适合您的查找。

    【讨论】:

    • 我不确定我的方案是否适合生产者/消费者方案。取消订阅请求不需要遵循与订阅请求相同的顺序,因此我看不出在这种情况下使用队列有什么好处。与仅使用字典相比,我没有看到额外的好处。
    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 2010-11-21
    • 2023-03-10
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2013-02-06
    相关资源
    最近更新 更多