Is ReaderWriterLockSlim.EnterUpgradeableReadLock() essentially the same as Monitor.Enter()?

c#, multithreading, readerwriterlockslim

Solution

Agreed. If all of your threads need to acquire an upgradable read lock and you cannot afford to release a read lock and acquire a write lock then ReaderWriterLockSlim is no improvement over a simple exclusive lock. Recursion does not change that. RWLS and the need to avoid the ever present danger of deadlock heavily favors a pattern where a single thread does the writing.

Problem

So I have a situation where I may have many, many reads and only the occasional write to a resource shared between multiple threads. A long time ago I read about `ReaderWriterLock`, and have read about `ReaderWriterGate` which attempts to mitigate the issue where many writes coming in trump reads and hurt performance. However, now I've become aware of `ReaderWriterLockSlim`... From the docs, I believe that there can only be one thread in "upgradeable mode" at any one time. In a situation where the only access I'm using is `EnterUpgradeableReadLock()` (which is appropriate for my scenario) then is there much difference to just sticking with `lock(){}`? Here's the excerpt: A thread that tries to enter upgradeable mode blocks if there is already a thread in upgradeable mode, if there are threads waiting to enter write mode, or if there is a single thread in write mode. Or, does the recursion policy make any difference to this?

Original source

Related problems