6

このAPIから次の点を取り上げました。次の 2 つの点の違いを知りたいです。

  1. 待機中のスレッドは FIFO 順で通知されます。

  2. 待機中のメソッドから戻るスレッドのロック再取得の順序は、スレッドが最初にロックを取得する場合と同じです。これはデフォルトのケースでは指定されていませんが、公平なロックでは、最も長く待機しているスレッドが優先されます。

Conditionこれは、通常 ReentrantLock メソッドによって返されるクラスに関連しており、引用したビットは、 Object クラスのメソッドと通常の監視メソッドの.newCondition()違いを説明しています。Condition

「待機中のスレッドは FIFO 順で通知されます」。が公平に作成されているlockかどうかにかかわらず、待機中のスレッドが FIFO の順序で通知されるという事実はまったく無関係だと思います。とにかく、それらがどのようにキューに入れられるかを決定するのは、それらが構築されたかどうか、公正かどうかです。

確認を求めるだけです。

前もって感謝します。

4

3 に答える 3

0

ロックが公平に作成されているかどうかにかかわらず、待機中のスレッドが FIFO の順序で通知されるという事実はまったく関係ありませんね。いずれにせよ、それらがどのようにキューに入れられるかを決定するのは、それらが構築されたかどうか、公正かどうかです。

関連性があると思います。

T1 と T2 が条件 C で待機しており (T1 が T2 より長く待機している)、T3 がモニター内で実行されており、T4 が最初のロックの取得を待機しているシナリオを考えてみましょう。T3 は C に信号を送り、ロックを解除してモニターを離れます。スプリアス ウェイクアップが発生しないとします。

ロックが公平である場合、T4 は確実に T1 の前にロックを取得しますが、待機中のスレッドが FIFO の順序で通知されるという事実により、T1 が T2 の前にロックを取得することが保証されます。

また、ロックが公平でない場合、T1 と T4 の間でどのスレッドが最初にロックを取得するかはわかりませんが、待機中のスレッドが FIFO の順序で通知されるという事実は、T1 が T2 の前にロックを取得することを保証します。 T1 がロックを取得するまで、他のシグナルが発生します (たとえば、T1 が次のシグナリングを担当する場合)。

于 2014-01-16T15:23:16.937 に答える