ReaderWriterLock类中可升级读锁和写锁的区别是什么?
根据MSDN描述,只有一个线程可以进入可升级的读锁定。如果我正确地遵循,我可能会忘记升级它,因为它与写锁定相同。 我缺少什么?
答案 0 :(得分:10)
(我假设你的意思是ReaderWriterLockSlim
,因为我认为ReaderWriterLock
没有可升级的阅读模式。)
虽然只有一个线程可以进入可升级的读锁定,但是一个线程可以具有可升级的读锁,而其他线程仍然可以进入读锁:
在任何给定时间,只有一个线程可以进入可升级模式。如果线程处于可升级模式,并且没有线程等待进入写入模式,则任何数量的其他线程都可以进入读取模式,即使有线程等待进入可升级模式。
将其与写锁比较:
当有线程等待进入写入模式时,尝试进入读取模式或可升级模式的其他线程会阻塞,直到等待进入写入模式的所有线程都超时或进入写入模式然后退出。
换句话说,写锁是完全独占的,而可升级的读锁将允许其他线程继续进入/退出读模式,直到需要升级。
答案 1 :(得分:3)
我认为UpgradableReadLock是一个特殊的ReadLock,可以转换为WriteLock。 MSDN声明的是,当时只有一个线程可以变为WriteLock。这是合乎逻辑的,因为只能有一个作家。