Зачем использовать Hashtable.Synchronized?

Из документации MSDN:

«Synchronized поддерживает несколько потоков записи при условии, что никакие потоки не читают Hashtable. Синхронизированная оболочка не обеспечивает поточно-безопасный доступ в случае одного или нескольких читателей и одного или нескольких писателей».

Источник: http://msdn.microsoft.com/en-us/library/system.collections.hashtable.synchronized.aspx

Похоже, мне все равно придется использовать блокировки, поэтому мой вопрос: зачем нам вообще использовать Hashtable.Synchronized?

В .NET 3.5 и выше (я понимаю, что это старый вопрос) это безопасно для множества читателей и писателей.

mhenry1384 24.07.2015 22:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
5 077
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

По этой же причине существуют разные уровни транзакции БД. Вы можете заботиться о том, чтобы запись была гарантирована, но не возражаете против чтения устаревших /, возможно, неверных данных.


РЕДАКТИРОВАТЬ I note that their specific example is an Enumerator. They can't handle this case in their wrapper, because if you break from the enumeration early, the wrapper class would have no way to know that it can release its lock.

Подумайте вместо счетчика. Несколько потоков могут увеличить значение в таблице, и вы хотите отобразить значение счетчика. Неважно, отображаете ли вы 1,200,453, а на самом деле количество 1,200,454 - вам просто нужно закрыть его. Однако вы не хотите, чтобы данные были повреждены. Это тот случай, когда потокобезопасность важна для записи, но не чтения.

когда вы говорите «вы не хотите, чтобы данные были повреждены», как бы это выглядело, если бы данные были повреждены? Я считаю неправильный счетчик поврежденным.

makstaks 27.10.2008 21:22

Если Google сообщает, что существует 1 200 453 страницы, потому что 1 200 454-я страница была только что добавлена, а запись Hashtable, содержащая счетчик, обновлялась прямо при отправке запроса, я бы не стал считать это проблемой. Вся концепция сегментированных счетчиков в GAE основана на этом принципе.

Chris Marasti-Georg 27.10.2008 21:36

Для случая, когда вы можете гарантировать, что ни один читатель не получит доступ к структуре данных при записи в нее (или когда вам все равно, что читать неправильные данные). Например, когда структура не изменяется постоянно, а выполняется одноразовое вычисление, к которому вам позже понадобится доступ, хотя и достаточно огромного, чтобы гарантировать, что в нее записываются многие потоки.

итак, окончательный результат всех многопоточных записей в эту синхронизированную структуру данных будет таким же, если бы у меня была блокировка структуры данных?

makstaks 27.10.2008 21:28

вам понадобится это, когда вы для каждого по хеш-таблице в одном потоке (читает), и существуют другие потоки, которые могут добавлять / удалять элементы в / из него (записывает) ...

Другие вопросы по теме