Re[5]: Как сделать потокобезопасный Dictionary
От: microcod США www.tehnoromantik.net
Дата: 20.10.10 05:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, victor_kr, Вы писали:


_>>Я не профессионал многопоточности, но возможно, можно сделать так.


_>>Создать объект для блокировки:


_>>private static object dictionaryLock = new object();


_>>Обернуть все обращения к dictionary конструкцией lock (dictionaryLock) {...}.


_>>Таким образом вы сделаете работу с dictionary потокобезопасной. Остальная часть кода (длительно выполняющаяся) будет запускаться однократно для каждого ID только после потокобезопасной проверки словаря.


А>Интересно, а у object вроде бы нет свойств типа "сигнальное состояние". Соотвественно lock( myobject ) наверное управляет состоянием посредством ссылки на object , а сам object при этом не затрагивается . Почему бы в таком случае не лочить сразу статический объект Dictionary , т.е.

А>

А>lock( myDictionary )
А>{
А>  /// работа с  myDictionary.
А>}

А>


Можно и так, использование отдельного объекта для синхронизации позволяет лучше видеть что мы делаем. К тому же если нам надо будет
синхронизировать доступ сразу к нескольким полям удобней это будет делать через выделенный объект для синхронизации, что бы не писать такое:

lock(var_1){
lock(var_2){
    //здесь потокобезопасный 
    //доступ к var_1 и var_2
  }
}

Программа — мысли спрессованные в код.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.