Использование ReaderWriterLock.AcquireReaderLock? - PullRequest
1 голос
/ 23 июня 2011

Итак, я читаю о синхронизации в .NET, и меня поразило любопытство.Если у вас есть несколько объектов READING для одних и тех же данных, вы должны использовать ReaderWriterLock.AcquireReaderLock, чтобы убедиться, что никакой другой объект не изменяет данные, пока в них есть блокировка.

Сейчас ... Если я уверен, что нет объектабудет изменять данные (хотя бы они читаются), имеет ли смысл приобретать ReaderLock?Или его советуют использовать и почему?

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Если вы уверены, что никто не изменяет данные, блокировка не требуется.Однако ключ в том, что абсолютно никакие общие данные не изменяются.Например, если вы читаете данные из экземпляра с лениво инициализированным внутренним состоянием, вы можете столкнуться с потенциальными условиями гонки.

2 голосов
/ 23 июня 2011

Теоретически, если вы на 100% уверены, что ничего не изменится, пока ваши читатели читают данные, то нет, нет необходимости устанавливать блокировку чтения.Блокировка чтения используется, чтобы запретить авторам изменять данные во время их чтения, но все же позволяет нескольким читателям одновременно получать доступ к этим данным.

Согласно документации MSDN :

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

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