Или вам всегда следует создавать какой-то другой объект блокировки?
Можете ли вы заблокировать общий словарь?
Ответы (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
Этот ответ был принят, но любой, кто его прочитает, должен также взглянуть на это, например: stackoverflow.com/questions/327654/. SyncRoot - не лучший способ заблокировать коллекции.
- person AFract; 15.01.2014
Я понимаю, что это старый ответ. Просто хотел сказать вам, что ссылка сейчас мертва.
- person Morten Jensen; 11.06.2015
Лучше не использовать SyncRoot, это проблема разработчиков .net, вместо этого используйте Lock (_lockObject).
- person Hamid Naeemi; 19.02.2018
Вы можете заблокировать любой объект, который хотите (кроме типов-значений). Однако рекомендуется заблокировать объект .SyncRoot.
person
Vilx-
schedule
04.01.2009