2012-05-22 6 views
1

В чем разница между возможностью обновления блокировки чтения и блокировкой записи в классе ReaderWriterLock?Разница обновляемой блокировки чтения против блокировки записи в C# ReaderWriteLock

На основе описания MSDN только один поток может вводить обновляемую блокировку чтения. Если я буду следовать правильно, я мог бы просто забыть об обновлении, так как он был таким же, как блокировка записи. Что-нибудь мне не хватает?

+0

Вы хотите сказать ReaderWriterLockSlim? –

ответ

9

(я предполагаю, что вы имеете в виду ReaderWriterLockSlim, так как я не думаю, что ReaderWriterLock имеет режим обновляемых чтений.)

Хотя только один поток может ввести обновляемую блокировку чтения, один поток может иметь обновляемую блокировку чтения и другие потоки могут вводить блокировку чтения:

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

Сравните с замком записи:

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

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

+0

спасибо! Я получаю это сейчас. – Mel

+0

Я думаю, что пример MSDN (https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.enterupgradeablereadlock.aspx) был бы более кратким, если бы он использовал только одну блокировку записи. Модифицированные блокировки чтения имеют смысл только в том случае, если на этом же экземпляре «ReaderWriterLockSlim» есть блокировка чтения в коде. Дайте мне знать иначе. –

1

Я думаю, что UpgradableReadLock - это специальный ReadLock, который можно преобразовать в WriteLock. Что означает MSDN, что только один поток может превратиться в WriteLock в то время. Это логично, поскольку может быть только один писатель.

Смежные вопросы