0

RentrantReadWriteLockについての私の理解では、同時に多くの読み取りが許可されますが、書き込みは 1 回しか許可されません。

読み取りロックを取得しようとすると、ドキュメントの状態

Acquires the read lock if the write lock is not held by another thread and returns immediately.

If the write lock is held by another thread then the current thread becomes disabled 
for thread scheduling purposes and lies dormant until the read lock has been acquired.

heldここで とはどういう意味ですか ?

  • 別のスレッドが書き込みロックを要求し、書き込みよりも実行されましたか?

また

  • 上記と、別のスレッドが書き込みロックを要求したが、それを取得するのを待っている場合。

書き込みロックが要求されたとき、次の場合は許可されないためです。

  • 他の誰かが書き込みロックを持っています
  • 他の誰かが読み取りロックを持っています

書き込みロックドキュメントから:

Acquires the write lock if neither the read nor write lock are held by another 
thread and returns immediately, setting the write lock hold count to one.

...

If the lock is held by another thread then the current thread becomes 
disabled for thread scheduling purposes and lies dormant until the write lock has 
been acquired, at which time the write lock hold count is set to one.

したがって、スレッドが要求後に書き込みロックを待機している場合、読み取りロックの呼び出しのその後の動作について知りたいだけです。書き込みロックの要求をさらに長く待機させますか?

4

2 に答える 2

1

このコンテキストで保持されるとは、ロックが要求され、提供されたことを意味します。ただ待っているだけでは、開催されたとはみなされません。

ReentrantReadWriteLock多数のスレッドがロックを要求している場合には、既知の問題があります。Dr. Heinz Kabutz は、ロック スターベーションに関する興味深いニュースレターを作成しました。

これらの問題の多くが新しい Java 7 Phaserで修正されていることは理解していますが、どちらかと言えばまだ十分に慣れていません。

于 2013-03-30T17:14:48.090 に答える
0

hold here とはどういう意味ですか?

ロックが要求され、取得されました。

したがって、スレッドが要求後に書き込みロックを待機している場合、読み取りロックの呼び出しのその後の動作について知りたいだけです。書き込みロックの要求をさらに長く待機させますか?

ある段階ですべての読み取りロックが解放された場合、 への呼び出しlock.writeLock().lock()は書き込みロックの取得に成功します。ただし、複数のスレッドが読み取りロックを保持できることに注意してください。そのため、1 つ以上のスレッドが常に読み取りロックを保持している場合、他のスレッドが書き込みロックを取得できず、深刻な活性の問題が発生します。

于 2013-03-30T17:30:56.223 に答える