Есть ли тонкая блокировка чтения / записи для .NET 2.0? - PullRequest
5 голосов
/ 13 ноября 2008

Я смотрел на ReaderWriterLock в .NET 2.0 и ReaderWriterLockSlim в .NET 3.5, и в тонкой версии не используются объекты ядра для блокировки. Для моего контекста, который потенциально может генерировать большое (но не огромное) количество объектов, это звучит лучше.

Но код, который я пишу, должен использоваться как в .NET 2.0, так и в 3.5 в течение переходного периода, поэтому версию 3.5, которая выглядит хорошо для моих целей, использовать нельзя.

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

Ответы [ 4 ]

5 голосов
/ 13 ноября 2008

Насколько я знаю, у Microsoft нет ни одного (в противном случае ReaderWriterLockSlim было бы несколько бессмысленно), и если вы найдете кого-то другого, кроме того, кому вы доверяете, иметь превосходных умов, которые Я долго думал, внедрял и тестировал, я бы не стал доверять. Я, конечно, не стал бы доверять случайной реализации CodeProject, например.

Есть ли у вас какие-либо конкретные меры, позволяющие предположить, что использование ReaderWriterLockSlim будет , поэтому намного лучше, чем стоит искать альтернативы .NET 2.0? Это, конечно, «приятно иметь», но я подозреваю, что случаи, когда это массово значимо, относительно редки. Если вы уже не знаете, что блокировка является для вас узким местом, я буду придерживаться того, что у вас есть, и просто буду готов к обновлению, когда вы сможете.

Возможно, вы захотите попробовать использовать обычные мониторы, а не ReaderWriterLock - во многих случаях издержки RWL перевешивают выгоду.

Конечно, это все на индивидуальной основе - ваше приложение может быть тем, которое действительно будет сделано намного, намного быстрее к ReaderWriterLockSlim ...

1 голос
/ 25 сентября 2010

Без жесткой блокировки ReadWriteLocker - Этот класс разработан на основе ReaderWriterLock Alternative, который на 20% -30% быстрее, чем ReaderWriterLock.

Различия, которые я сделал:

  1. Поддерживает блокировки обновления через вложенные блокировки записи внутри чтения замки. В отличие от ReaderWriterLock, блокировки обновления являются поточно-ориентированными.
  2. Имеет примеры коллекций, которые показывают вам, как создавать безопасные потоки коллекции. Они не так эффективны, как коллекции PFX в .NET 4.0, но у них есть и другие преимущества.
  3. Невозможно заблокировать тупик, если все инициированные блокировки разблокированы. И это все остальные запирающие механизмы работают взаимоисключающие с этим шкафчиком.
  4. Способность обнаруживать тупики и отключать накладные расходы на обнаружение тупиков, как только вы убедитесь, что взаимоблокировки не произойдет.
  5. Очень рекурсивный и во много раз более устойчивый чем ReaderWriterLock и ReaderWriterLockSlim.

Я потратил много работы над этим, и я надеюсь, что это пригодится. На данный момент он очень новый, и потребуются испытания в отношении других механизмов блокировки. И, конечно же, все это жалобы на .NET 2.0.

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

Я задал вопрос о недостатках использования ReaderWriterLock, и есть несколько интересных ссылок, содержащих альтернативы ReaderWriterLock. Посмотрите на ответ на мой вопрос .

0 голосов
/ 06 апреля 2009

А как насчет ReaderWriterGate из библиотеки PowerThreading ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...