0

Sunのドキュメントが明確ではないため、JavaのReadWriteLocks(具体的にはReentrantReadWriteLockの実装)について簡単に質問します。

書き込みロックが別のスレッドによって要求されたときに、読み取りロックがスレッドによって保持されている場合はどうなりますか?書き込みロックスレッドは、現在保持されているすべての読み取りロックが解放されるのを待つ必要がありますか?また、書き込みロックが許可されて解放されるまで、すべての新しい読み取りロック要求はブロックされますか?

ありがとう

4

2 に答える 2

3

Javadocはこれを説明しています:

このクラスは、ロックアクセスのリーダーまたはライターの優先順位を強制しません。ただし、オプションの 公平性 ポリシーはサポートされています。公平に構築された場合、スレッドはおおよその到着順序ポリシーを使用してエントリを争います。書き込みロックが解除されると、最も長く待機している単一のライターに書き込みロックが割り当てられます。または、どのライターよりも長く待機しているリーダーがある場合は、リーダーのセットに読み取りロックが割り当てられます。不公平として構築された場合、ロックへのエントリの順序は到着順序である必要はありません。いずれの場合も、リーダーがアクティブでライターがロックに入ると、そのライターが書き込みロックを取得して解放するまで、後続のリーダーには読み取りロックが付与されません。


書き込みロックが別のスレッドによって要求されたときに、読み取りロックがスレッドによって保持されている場合はどうなりますか?書き込みロックスレッドは、現在保持されているすべての読み取りロックが解放されるのを待つ必要がありますか?

はい、作家は待たなければなりません。ただし、現在保持されている読み取りロックのみを待機します。後で到着するリーダーは、ライターの後にキューに入れられます。

また、書き込みロックが許可されて解放されるまで、すべての新しい読み取りロック要求はブロックされますか?

はい

于 2009-07-07T10:10:38.703 に答える
1

AReadWriteLockは、読み取りロックと同時に書き込みロックを保持することはできません。たとえば、読み取りロックが保持されているときに書き込みロックを要求すると、ブロックまたは失敗します。

于 2009-07-07T09:59:14.827 に答える