問題タブ [reentrantlock]
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.
java - ReentrantLock.lock() は他のスレッドをブロックしません
ReentrantLock.lock() の動作を理解するのに苦労しています
私は次のクラスを持っています
次のテストで実行します。
私はデッドロックを予想していたでしょう。a() メソッドが lock.lock() を呼び出すと、b() メソッドを呼び出す人は、a() を呼び出すスレッドが lock.unlock() を呼び出すまで、b の lock.lock() で待機する必要があると思います。しかし、a() は b() が condition.signalAll() を呼び出すのを待っているため、両方のメソッドは永久にブロックされたままになっているはずです。
代わりに、これはコンソールに表示される出力です。
lock() と unlock() の適切な使用と機能について、私は何を誤解していますか?
java - ピンポンゲームを正しく実装する
課題で、「ping」と「pong」を正しく (ping の前に pong がないことを意味する) 10 回呼び出すピンポン ゲームを実装するように要求されました。つまり、コンソールの最終的な出力は、「ping!(1)」、「pong!(1)」、「ping!(2)」、「pong!(2)」などになります。
要求は、セマフォ、reetrantlock、およびカウントダウン ラッチを備えた gamepingpongthread を実装することです。
私の問題は、印刷順序が必ずしも要求どおりではないことです。何が間違っているのだろうかと思います。
コードは次のとおりです。
前もって感謝します
java - 別の ReentrantReadWriteLock 内で ReentrantReadWriteLock を使用する
ReentrantReadWriteLock を正しく実装したかどうかわからないので、何か間違っていたら教えていただければ幸いです。
シナリオ: シャツを作るのに 2 つのステップが必要であると想像してください。シャツはすべて同じものになります。
- 最初のステップでは、裁縫道具がシャツを縫う
- 2番目のステップでは、ボタンツールが最初のステップからシャツを取り、ボタンを付けます. 簡単にするために、各シャツにはボタンを 1 つだけ配置します。
ステップ 1 とステップ 2 で使用するソーイング ツールとボタン付けツールはそれぞれ合計 10 個あります。ボタンは食器棚の別の棚に保管されています。
私の目的は、スレッドが次のことをしないようにしながら、できるだけ多くの並行性を確保することです。
- 同じ棚からボタンを取る
- 同じ裁縫道具からシャツを取る
- デッドロック
そのため、次のコードへのロックを実装しました。
質問:
secondLock を実装する必要がありますか? これは、firstLock が既にコードをロックしており、他のスレッドをブロックしているためです。
両方のロックが実際に必要であると仮定すると、同時実行性を向上させるために 2 つの ReentrantReadWriteLock オブジェクトを作成する必要があるでしょうか? このリンクから参照しました - http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html
スレッドとインターリーブについて読みましたが、次のステートメントで「インターリーブ」が何を意味するのかわかりません。誰かが私にそれを素人の言葉で説明できますか?
引用: c1 の更新が c2 の更新とインターリーブされるのを防ぐ理由はありません
ソース: http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html
前もって感謝します!