В классе ReaderWriterLockSlim написано много статей, которые позволяют многократно читать и писать. Все из них (по крайней мере, что я нашел) рассказывают, как использовать его без особого объяснения, почему и как это работает. Стандартный пример кода:
lock.EnterUpgradeableReadLock();
try
{
if (test if write is required)
{
lock.EnterWriteLock();
try
{
change the resourse here.
}
finally
{
lock.ExitWriteLock();
}
}
}
finally
{
lock.ExitUpgradeableReadLock();
}
Возникает вопрос: если обновляемая блокировка разрешает только один поток вводить его раздел, почему я должен вызвать метод EnterWriteLock внутри? Что произойдет, если я этого не сделаю? Или что произойдет, если вместо EnterUpgradeableReadLock я вызову EnterWriteLock и напишу на ресурс без использования возможности обновления блокировки вообще?