[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10101] Re: Java 言語で学 ぶデザインパターン入門第 6 回議事録



前橋です。

武川さん:
>> 3.既にロックを取得している場合は、ロック獲得処理を行なわない。
>> という処理の仕方はないのでしょうか?

>村山さん:
>多分これは,
>「3,モニタを一回だけ取得するのは稀だから,一回だけの時が
>   若干遅くなっても二回以上の時に最適化してモニタを実装する.」
>になると思います.

ええと、ひとつのスレッドがひとつのオブジェクトに対し複数回ロックを
取得しようとした場合、1回目のロック取得と、2回目以降のロック取得と
では挙動が異なりますよね? 2回目以降は待たされないわけですから。

武川さんのおっしゃりたいことは、

 1回目のロック取得動作と、2回目以降のロック取得動作とを
 比べた場合、2回目以降のロック取得動作の方が軽いのではないか。

ということなのだと思いますし、単純な実装なら、それは十分あり
得ると思うのですが、どうでしょう?

# そもそもベリファイアを抜けたコードなら、「2回目以降のロック
# 取得動作」って、することないんでは。

実測して差がほとんど出なかったのなら、

 1回目のロック取得動作と、2回目以降のロック取得動作とを
 比べた場合、2回目以降のロック取得動作の方が軽いのではないか、
 という推測が間違っていた。

というパターンももちろん考えられますが、

JITレベルで最適化された挙句、

> > synchronized (b)
> > {
> >   b.append(foo);
> >   b.append(bar);
> >   b.append(baz);
> > }
 
結局こういうコードに展開されている、というオチはないんでしょうか。

微妙に挙動が違うので(atomicな部分がでかくなっている)、やらない
のかな...

推測、というか想像が多くてすみません。

------------------------------------------------------------
  前橋 和弥              PXU00211@xxxxxxxxxxx
                         http://member.nifty.ne.jp/maebashi/
------------------------------------------------------------