У меня есть объект Queue, который мне нужно для обеспечения безопасности потоков. Было бы лучше использовать объект блокировки следующим образом:
lock(myLockObject)
{
//do stuff with the queue
}
Или рекомендуется использовать Queue.Synchronized следующим образом:
Queue.Synchronized(myQueue).whatever_i_want_to_do();
Из чтения документов MSDN говорится, что я должен использовать Queue.Synchronized, чтобы сделать его потокобезопасным, но затем он дает пример использования объекта блокировки. Из статьи MSDN:
Чтобы гарантировать безопасность потока Очередь, все операции должны быть выполнены только через эту оболочку.
Перечисление через коллекцию по существу не является потокобезопасным процедура. Даже если коллекция синхронизированы, другие потоки могут изменить коллекцию, которая вызывает перечислитель для исключения. Чтобы гарантировать безопасность резьбы во время перечисления, вы можете заблокировать сбор в течение всего перечисление или перехват исключений в результате изменений, внесенных другими потоки.
Если вызов Synchronized() не обеспечивает безопасность потоков, что это за точка? Я что-то пропустил?