Можете ли вы заблокировать общий словарь?

Или вам всегда следует создавать какой-то другой объект блокировки?


person leora    schedule 04.01.2009    source источник


Ответы (2)


Да, преобразовать его в IDictionary и заблокировать .SyncRoot:

Generic.Dictionary<int, int> dic = new Generic.Dictionary<int, int>();

lock (((IDictionary)dic).SyncRoot)
{
    // code
}

Благодаря этому источнику информации.

Конечно, поточно-ориентированный словарь тоже был бы хорош, как предлагали другие.

person Michael Haren    schedule 04.01.2009
comment
Этот ответ был принят, но любой, кто его прочитает, должен также взглянуть на это, например: stackoverflow.com/questions/327654/. SyncRoot - не лучший способ заблокировать коллекции. - person AFract; 15.01.2014
comment
Я понимаю, что это старый ответ. Просто хотел сказать вам, что ссылка сейчас мертва. - person Morten Jensen; 11.06.2015
comment
Лучше не использовать SyncRoot, это проблема разработчиков .net, вместо этого используйте Lock (_lockObject). - person Hamid Naeemi; 19.02.2018

Вы можете заблокировать любой объект, который хотите (кроме типов-значений). Однако рекомендуется заблокировать объект .SyncRoot.

person Vilx-    schedule 04.01.2009