Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 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
}
}