【问题标题】:How can I make a thread safe dictionary如何制作线程安全字典
【发布时间】:2011-04-08 20:42:06
【问题描述】:

我有一本字典,我想让它成为静态的。假设我有一个包含一些数据的字典。如果我同时通过两个进程访问这个字典,那么我的数据不匹配。我该如何解决这个问题。

例如在字典中我有键 A- 值 1 2 3 4 5 关键 B 值 6 7 8 9 10

当我通过两个进程访问此字典时,一个为 A 读取数据,另一个为 B 读取数据。然后我得到 B 包含 A 值的结果集。

【问题讨论】:

  • 与其开始无休止的“如果你的程序是用...编写的”答案,不如告诉我们你是用哪种编程语言编写的?
  • ...记得在以后的问题中说出来!

标签: c# .net multithreading


【解决方案1】:

您只需要在 System.Collections.Concurrent 中使用 ConcurrentDictionary

private static readonly ConcurrentDictionary<TKey, TValue> dictionary = 
    new ConcurrentDictionary<TKey, TValue>();

【讨论】:

    【解决方案2】:

    如果你的程序是用 .NET 编写的,你可以看看这个关于 the best way of implementing a thread-safe Dictionary 的相关问题,带有链接和 C# 示例代码……

    【讨论】:

      【解决方案3】:

      如果您的程序是用 Java 编写的,您需要同步所有检索和设置值的方法。

      例如:

      public synchronized int getValue() {
          return value;
      }
      

      “synchronized”关键字确保两个进程不会同时读取或设置数据。

      这是通过 JVM 获取对象上的锁来实现的,一次只允许一个线程访问它。然后执行代码,一旦完成,锁就会被释放。如果另一个线程正在等待,则该线程可以获取对象上的锁。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-28
        • 1970-01-01
        • 1970-01-01
        • 2011-10-20
        • 2011-01-17
        相关资源
        最近更新 更多