1

私の質問はこれです:私がこれらの行を持っていると仮定します:

Person p, q;
p.go(q.getAddress());

これで、関数go()とgetAdress()が同期されます。関数getAddress()が戻るのに時間がかかると仮定します。その間、go()関数はロックされますか?意味:pはgo()関数の同期のための「キー」を取得しますか?ありがとう!

4

1 に答える 1

0

補足: 言語機能として、コードsynchronizedのセクションをロックしていると思わせることがあります。この誘惑に抵抗する必要があります。コードをロックする代わりに、データを保護して、一部の不変条件を一時的に中断するセクションを除いてすべての場所で真であることを確認します。

式が評価されるとどうなるか見てみましょう。

q.getAddress entered
q.getAddress returns
p.go entered
p.go returns

「同期」はどちらも他方の内部では発生せず、どちらの同期も何も保護しないウィンドウがあります。それがあなたが知りたかったことですか?q.getAddressp.go

于 2013-02-10T17:28:32.017 に答える