只读字典 - 多个线程调用.ContainsKey方法

时间:2010-11-26 16:42:34

标签: c# .net multithreading concurrency dictionary

我有一个静态的 readonly 字典。 将对此词典进行修改。

我有多个线程使用.ContainsKey(Key)从这本字典中读取。 e.g。

class MyData
{ 
    private static private IDictionary<int, string> _dictionary = new Dictionary<int, string>();

    MyData()
    {
        // Load Dictionary here
    }

    public string GetValue(int key)
    {
        if (_dictionary.ContainsKey(key))
        { 
            return _dictionary[key];   
        }
    }
}

这样做有任何线程问题吗?

4 个答案:

答案 0 :(得分:20)

如果没有人改变它:这很好。如果有偶尔进行编辑,那么可以查看ReaderWriterLockSlim,或者(我的偏好)编辑快照/副本并交换参考。

答案 1 :(得分:5)

如果你只是想读书,这是安全的。

答案 2 :(得分:2)

如果在从多个线程读取之前所有的“添加”都已完成,那么就可以了。仅仅因为它的readonly并不意味着它的线程安全 - 它不是。

也许您应该使用ReaderWriterLock来同步访问权限

答案 3 :(得分:2)

如果您要同时编写数据(并且使用的是.NET 4.0),那么您可以使用ConcurrentDictionary