在以某种方式与ReentrantreadWritelock中的读写锁相关



请更多地向我解释合同。我无法弄清楚ReentrantReadWriteLock中是否有两个锁相关?或这些只是两个普通锁的捆绑包?

它允许多个线程同时读取资源,但需要一个线程等待独家锁才能写入资源。

规则是:

  • 一些读者可以同时共享资源。如果你有阅读锁,您可以安全地获取另一个读取锁。最大值共享锁的计数为1111 1111 1111 1111
  • 如果您有读锁,则无法获得写锁
  • 如果您有写锁,则无法在任何其他线程中获取读取锁。
  • 当没有活跃的作家时,读者可以访问资源任何其他线程。
  • 如果您有写锁,则可以在相同的线程。线程可以的最大计数自己的是1111 1111 1111 1111
  • 当没有其他读者或作家(来自其他线程)活动时,作者可以访问资源。
  • 更喜欢作家而不是读者。也就是说,如果作者在锁上等待,则不允许其他线程的新读者访问资源。现有的读者可以继续使用资源,直到释放锁。这样可以防止所谓的"作家饥饿"。
  • 允许通过获取从写锁降级到读取锁写锁,然后读取锁,然后释放写锁。但是,从读取锁升级到写锁不是可能。

内部锁定状态(c)由int值维护。在这种情况下,由于我们已经阅读和写锁,因此在逻辑上将其分为两条短裤:一个代表独家(作者)锁定计数的较低的短裤,以及共享(读取器)保持计数的上限。

假设锁的当前状态为 c = xxxx xxxx xxxx xxxx yyyy yyyy yyyy yyyy yyyy读取器锁的数量是上部XXXX xxxx xxxx xxxx

作家锁的数量是下部Yyyy yyyy yyyy yyyy

如果线程在等待读取锁定,则将共享锁,但是当线程要获取时,仅允许访问该线程与互斥相同的访问。

因此,允许任一操作。if lock is held by readers and thread request write lock no more readers are allowed to acquire read lock until thread which has acquired write lock release it

最新更新