問題タブ [reentrantreadwritelock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
4730 参照

scala - scala コレクション循環バッファー

循環バッファーを使用して、ここをいじっているだけです。これは賢明な実装ですか、それともこの猫の皮をむくためのより高速で信頼性の高い方法はありますか?

0 投票する
1 に答える
263 参照

java - writeLock がロックされている間、Re​​entrantReadWriteLock は読み取りますか?

私は研究してReentrantReadWriteLockいます。

テスト用の簡単なコードを書きます (Thread.sleep() を使用すると予測可能な結果が保証されないことはわかっていますが、幸運だと思います:)):

出力:

10401 - 401 == 10000

10000 執筆時点です。

私が理解したように、2番目の読み取りスレッドは書き込み前に終了できません。したがって、書き込みと 2 回目の読み取りは並行して実行されます。それは私にとって予測可能な行動ではありません。

あなたはそれについてどう思いますか?

0 投票する
0 に答える
100 参照

java - 別の ReentrantReadWriteLock 内で ReentrantReadWriteLock を使用する

ReentrantReadWriteLock を正しく実装したかどうかわからないので、何か間違っていたら教えていただければ幸いです。

シナリオ: シャツを作るのに 2 つのステップが必要であると想像してください。シャツはすべて同じものになります。

  1. 最初のステップでは、裁縫道具がシャツを縫う
  2. 2番目のステップでは、ボタンツールが最初のステップからシャツを取り、ボタンを付けます. 簡単にするために、各シャツにはボタンを 1 つだけ配置します。

ステップ 1 とステップ 2 で使用するソーイング ツールとボタン付けツールはそれぞれ合計 10 個あります。ボタンは食器棚の別の棚に保管されています。

私の目的は、スレッドが次のことをしないようにしながら、できるだけ多くの並行性を確保することです。

  1. 同じ棚からボタンを取る
  2. 同じ裁縫道具からシャツを取る
  3. デッドロック

そのため、次のコードへのロックを実装しました。

質問:

  1. secondLock を実装する必要がありますか? これは、firstLock が既にコードをロックしており、他のスレッドをブロックしているためです。

  2. 両方のロックが実際に必要であると仮定すると、同時実行性を向上させるために 2 つの ReentrantReadWriteLock オブジェクトを作成する必要があるでしょうか? このリンクから参照しました - http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

  3. スレッドとインターリーブについて読みましたが、次のステートメントで「インターリーブ」が何を意味するのかわかりません。誰かが私にそれを素人の言葉で説明できますか?

引用: c1 の更新が c2 の更新とインターリーブされるのを防ぐ理由はありません

ソース: http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

前もって感謝します!

0 投票する
2 に答える
309 参照

java - ReadWriteLock デコレータ、このコードはスレッドセーフですか?

メモリ、ファイル、およびリモート サービスに支えられたキャッシュ ストアをアプリに構築しています。明示的な同期を避けて、ストアをシンプルに保ちながら、ブロッキングなどの動作の問題にデコレータを使用したい。

これは単純なキャッシュです。これは単なる例です。

getDecorator()get()set()、 whileの同期isKeyStale()を提供するデコレータを返し、デコレータがrefreshKey()理由や方法を知らなくてもキーを更新する必要があるかどうかを確認できるようにします。hereから同期デコレータのアイデアを得ました。

質問:

  • SimpleCacheデコレータを介してのみ使用されると仮定すると、コードはスレッドセーフですか?
  • ReadWriteLock同期されているクラスの外で宣言するのは悪い習慣ですか? SimpleCache.getDecorator()キャッシュとデコレータ インスタンス間の 1 対 1 のマッピングが保証されるので、これで問題ないと思います。
0 投票する
3 に答える
241 参照

java - Java ReadWriteLock を使用してキャッシュされたデータを同期する - 状態変数を揮発性とマークするかどうか?

Oracleの ReadWriteLock javadocその実装volatileでは、ロックの機能と使用方法について説明していますが、キーワードを使用するかどうかについては何も述べていません。

これはdo-all-mutable-variables-need-to-be-volatile-when-using-locksと同じ質問ではありません。なぜなら、ロックがアクセスと可視性を適切に同期させることを嬉しく思いますがvolatile、たとえば、コンパイラの最適化やその他の理由で、変数はまだ良い考えですか?

私のキャッシュされたデータは、めったに変更されず、オブジェクトのさまざまな属性を使用してリスト内のオブジェクトをマッピングするListいくつかのデータで構成されています。Maps

最良の宣言は何でしょうか? 私はこれを持っています: