请详细解释一下合同。我不知道里面是否包含两把锁ReentrantReadWriteLock
有某种关系吗?或者这些只是两把普通锁的捆绑?
它允许多个线程同时读取资源,但要求线程等待独占锁才能写入资源。
规则是:
- 多个读者可以同时共享资源。如果你有一个
读锁,您可以安全地获取另一个读锁。最大值
共享锁的数量为 1111 1111 1111 1111
- 如果您有读锁,则无法获取写锁
- 如果您有写锁,则无法在任何其他线程中获取读锁。
- 当没有活跃的写入者时,读取者可以访问资源
任何其他线程。
- 如果你有一个写锁,你可以在
同一个线程。一个线程可以拥有的最大独占锁数量
自己的是 1111 1111 1111 1111
- 当没有其他读取器或写入器(来自不同线程)处于活动状态时,写入器可以访问资源。
- 比起读者更喜欢作家。也就是说,如果写入者正在等待锁,则不允许其他线程的新读取者访问该资源。现有的读者可以继续使用该资源,直到他们释放锁。这可以防止所谓的“作家饥饿”。
- 允许通过获取从写锁降级为读锁
写锁,然后读锁,然后释放写锁。
然而,从读锁升级到写锁并不是
可能的。
在内部,锁定状态 (c) 由 int 值维护。在这种情况下,由于我们有读锁和写锁,因此它在逻辑上分为两个短:较低的表示独占(写入者)锁持有计数,较高的表示共享(读取者)持有计数。
假设锁的当前状态是
c= xxxx xxxx xxxx xxxx yyyy yyyy yyyy yyyy 那么
读卡器锁数量为高位 xxxx xxxx xxxx xxxx
写锁数量为低位 yyyy yyyy yyyy yyyy
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)