[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/
------------------------------------------------------------