1. ホーム
  2. java

[解決済み] ReentrantReadWriteLock:ReadLockとWriteLockの違いは何ですか?

2022-02-15 18:06:07

質問

知っていることは

  • ReadLock WriteLock 互いに何らかの影響を与える
  • WriteLock は、ちょうど シンクロナイズド
  • ReadLock 一人ではできない

解決方法は?

readLock.lock()を実行します。

  • これは、もし他のスレッドが 書き込み (を保持している 書き込みロック)、他のスレッドが書き込みをしなくなるまでここで停止します。
  • ロックが許可されると、他のスレッドからは 書き込み (ロックが解除されるまで(つまり書き込みロックを取る)。

writeLock.lock()です。

  • これは、もし他のスレッドが 読書 または ライティング の場合、停止 で、他のスレッドが読み書きをしなくなるまで待ちます。
  • ロックが付与されると、他のスレッドからは 読む または 書く (すなわち、読み取りまたは書き込みのロックを取る) ロックが解放されるまで。

これらを組み合わせることで、一度に1つのスレッドだけが書き込み権限を持ち、スレッドが書き込みを行っているとき以外は、好きなだけ多くの読者が同時に読み込めるようにすることができます。

別の言い方をすれば あなたが毎回 読む を構造体から取得します。 読む ロックすることができます。をするたびに 書く を取る。 書く をロックします。この方法では、書き込みが行われるたびに誰も読んでいません(排他的なアクセス権を持っていると想像できます)が、誰も書き込んでいない限り、多くの読者が同時に読むことができます。