Каковы реальные недостатки использования ReaderWriterLock - PullRequest
7 голосов
/ 12 апреля 2011

У нас есть целевой проект .NET 2.0 RTM (да, это должен быть .NET 2.0 RTM, у нас есть несколько ортодоксальных клиентов). И мне просто интересно, каковы недостатки ReaderWriterLock ? Почему это так плохо, что все говорят: «Не используйте это, попробуйте использовать что-то еще, например lock оператор»? Если бы мы могли использовать .NET 3.5, я бы определенно использовал ReaderWriterLockSlim , но с ReaderWriterLock мне немного страшно, когда все эти предупреждения приходят отовсюду. Кто-нибудь измерял производительность или что-то еще? Если есть проблемы с производительностью, при какой нагрузке мы можем их встретить?

У нас классическая ситуация с точки зрения ReaderWriterLock основного назначения, то есть многократного чтения и редко записи. Использование оператора lock заблокирует всех читателей. Возможно, это не страшная проблема для нас, но если бы я мог использовать ReaderWriterLock, я был бы более доволен. ИМО, представив несколько мониторов, действительно очень плохая идея.

Ответы [ 2 ]

7 голосов
/ 12 апреля 2011

Следующие несколько постов могут предоставить вам идеи, которые вы ищете.

Сравнение производительности ReaderWriterLockSlim с ReaderWriterLock

Рико Мариани об использовании ReaderWriterLock, часть В этом посте объясняются некоторые затраты и сценарии использования ReaderWriterLock, также отметьте часть 1 и часть 2

Джеффри Рихтер об альтернативе ReaderWriterLock

1 голос
/ 12 апреля 2011

Если вы действительно сталкиваетесь с идеальным вариантом использования ReaderWriterLock (т.е. много одновременных чтений и мало записей), используйте его!

Если вы обнаружите, что это слишком медленно, есть альтернативы.Сандживакумар дал несколько ссылок в своем ответе.Я также предоставлю один из них:
Методы Low-Lock в действии: Реализация блокировки Reader-Writer

Я процитирую вынос по этой ссылке здесь:

  1. Используйте блокировки чтения-записи, как было предложено в моей первой статье.Если блокировка перфорации является проблемой, примите реализацию здесь как замену для .NET System.ReaderWriterLock.Не стесняйтесь использовать эту реализацию, пока Microsoft не исправит версию в своей библиотеке.
  2. Спин-блокировки - действительно ценная техника с низким замком.Здесь они использовались для создания чистой, простой, но эффективной блокировки чтения-записи, полностью написанной в управляемом коде.Эта блокировка значительно проще, чем большинство реализаций, которые я видел, но все же является наиболее близкой к оптимальной.Причина этого заключается в том, что использование спиновых замков значительно упрощает проектирование и анализ замка без ущерба для производительности.Не стесняйтесь использовать реализацию Spin Lock, чтобы показать другие высокопроизводительные параллельные конструкции.
  3. Даже такая простая вещь, как блокировка Reader-Writer, имеет тонкости в своем поведении (особенно если учитывать факторы производительности).Сохранение этого простым действительно окупается здесь.
...