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