gpt4 book ai didi

java - ReentrantReadWriteLock 中的读写锁是否有某种关联?

转载 作者:搜寻专家 更新时间:2023-11-01 01:36:11 25 4
gpt4 key购买 nike

请详细解释契约(Contract)。我不知道 ReentrantReadWriteLock 中包含的两个锁是否有某种关联?或者这些只是一捆两把普通锁?

最佳答案

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

规则是:

  • 多个读者可以同时共享资源。如果你有一个读锁,您可以安全地获取另一个读锁。最大值共享锁的数量是 1111 1111 1111 1111
  • 如果你有读锁,你不能获取写锁
  • 如果您拥有写锁,则无法在任何其他线程中获取读锁。
  • 当没有活跃的作者时,读者可以访问资源任何其他线程。
  • 如果你有一个写锁,你可以在同一个线程。一个线程可以拥有的最大排他锁数自己是1111 1111 1111 1111
  • 当没有其他读者或作者(来自不同线程)处于 Activity 状态时,作者可以访问资源。
  • 比起读者更喜欢作家。也就是说,如果一个写者正在等待锁,则不允许来自其他线程的新读者访问该资源。现有读者可以继续使用该资源,直到他们释放锁。这可以防止所谓的“作家饥饿”。
  • 允许从写锁降级为读锁,通过获取写锁,然后是读锁,然后释放写锁。但是,从读锁升级到写锁并不是可能。

在内部,锁定状态 (c) 由一个 int 值维护。在这种情况下,由于我们有读锁和写锁,所以逻辑上分为两个短:较低的代表独占(写入)锁持有计数,较高的代表共享(读取)持有计数。

假设锁的当前状态是 c= xxxx xxxx xxxx xxxx yyyy yyyy yyyy yyyy 那么读卡器锁数为高位 xxxx xxxx xxxx xxxx

writer锁的个数是低位yyyy yyyy yyyy yyyy

关于java - ReentrantReadWriteLock 中的读写锁是否有某种关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13091967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com