【问题标题】:Is Dictionary<Key, value> is thread safe for read, write and remove operationDictionary<Key, value> 对于读、写和删除操作是否是线程安全的
【发布时间】:2021-12-14 08:35:08
【问题描述】:

我们在应用程序中使用字典来使用线程维护数据处理。在这个应用程序中,一些线程执行读、写和删除操作。 Dictionary 对于读、写和删除操作是否是线程安全的。

【问题讨论】:

  • 不,写入和删除操作不是线程安全的。你应该使用 ConcurrentDictionary
  • 作为一般规则,请检查文档,除非它明确声明它线程安全的,否则规则是它不是.
  • @RasmusSøborg 你怎么知道,OP 应该使用 ConcurrentDictionary?取决于他实际在做什么,这可能是非常糟糕的建议。

标签: c# .net


【解决方案1】:

没有。字典不是线程安全的。
事实上,documentation 明确指出-

一个 Dictionary 可以同时支持多个读取器,只要不修改集合即可。即便如此,通过集合进行枚举本质上不是线程安全的过程。在枚举与写访问竞争的极少数情况下,必须在整个枚举期间锁定集合。要允许集合被多个线程访问以进行读写,您必须实现自己的同步。

有关线程安全的替代方案,请参阅 ConcurrentDictionary<TKey,TValue> 类或 ImmutableDictionary<TKey,TValue> 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多