Получаете блокировку одной словарной статьи вместо всего словаря? - PullRequest
0 голосов
/ 20 апреля 2011

Скажем, у меня есть static Dictionary<code><string, object> и я хочу сделать что-то вроде следующего, за исключением того, что я хочу заблокировать только определенную словарную запись, с которой я сейчас имею дело, вместо всего словаря:


lock(myDictionary)
{
   if(myDictionary["myKey"] == null)
   {
      myDictionary["myKey"] = new MyClass();
   }
}

Возможно ли это без написания собственной реализации словаря?

Спасибо

Ответы [ 3 ]

6 голосов
/ 20 апреля 2011

Вы можете использовать новый класс ConcurrentDictionary<TKey,TValue>. Он эффективно обеспечивает безопасность потоков, блокируя его более тонко, чем блокировка всего словаря.

1 голос
/ 20 апреля 2011

В вашем случае нет смысла «блокировать только определенную словарную запись»;даже если вы напишите свою собственную реализацию.Если вы не знаете, существует ли запись, и в таком случае вы хотите добавить ее в словарь, вам всегда придется синхронизировать доступ к управляющим структурам словаря.Другими словами, даже если вы реализуете это самостоятельно, потребуется синхронизировать доступ по крайней мере к определенной части его внутренних структур.

1 голос
/ 20 апреля 2011

Попробуйте ConcurrentDictionary

...