Словарь только для чтения - несколько потоков, вызывающих метод .ContainsKey - PullRequest
24 голосов
/ 26 ноября 2010

У меня есть статический только для чтения словарь. Нет будут внесены изменения в этот словарь.

У меня есть несколько потоков, читающих из этого словаря, используя .ContainsKey (Ключ).например,

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 ]

20 голосов
/ 26 ноября 2010

Если никто не мутирует, это нормально.Если было случайных изменений, то, возможно, посмотрите на ReaderWriterLockSlim или (мое предпочтение) отредактируйте снимок / копию и поменяйте местами ссылку.

5 голосов
/ 26 ноября 2010

Безопасно, если вы собираетесь только читать.

2 голосов
/ 26 ноября 2010

Если бы вы должны были писать данные одновременно (и вы использовали .NET 4.0), вы могли бы использовать ConcurrentDictionary

2 голосов
/ 26 ноября 2010

если все «добавление» завершено до того, как вы прочитаете из нескольких потоков, тогда все в порядке.То, что он доступен только для чтения, не означает его потокобезопасность, а это не так.

Может быть, вам нужно использовать ReaderWriterLock для синхронизации доступа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...