From owner-java@jp.FreeBSD.org Mon Jul 22 02:41:19 2002
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) id g6LHfJr45590;
	Mon, 22 Jul 2002 02:41:19 +0900 (JST)
	(envelope-from owner-java@jp.FreeBSD.org)
Received: from cs20.catv.ne.jp (cs20.catv.ne.jp [202.232.171.40])
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) with ESMTP/inet id g6LHfIn45578
	for <java@jp.FreeBSD.org>; Mon, 22 Jul 2002 02:41:18 +0900 (JST)
	(envelope-from yamasa@ec.catv.ne.jp)
Received: from localhost by cs20.catv.ne.jp (8.9.1/3.7W)
	id CAA00935; Mon, 22 Jul 2002 02:41:16 +0900 (JST)
Date: Mon, 22 Jul 2002 02:41:17 +0900 (JST)
Message-Id: <20020722.024117.74758272.yamasa@ec.catv.ne.jp>
To: java@jp.FreeBSD.org
From: OISHI Masakuni <yamasa@ec.catv.ne.jp>
In-Reply-To: <20020719163614.7ec433a8.daichi@jp.freebsd.org>
References: <sqbptxl5atc.wl@nue.mac.com>
	<20020719.013920.74753632.yamasa@ec.catv.ne.jp>
	<20020719163614.7ec433a8.daichi@jp.freebsd.org>
X-Mailer: Mew version 2.1 on Emacs 21.2 / Mule 5.0 (SAKAKI)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Reply-To: java@jp.FreeBSD.org
Precedence: list
X-Sequence: java 134
Subject: [java 134] Re: Java Memory Model
Errors-To: owner-java@jp.FreeBSD.org
Sender: owner-java@jp.FreeBSD.org
X-Originator: yamasa@ec.catv.ne.jp
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+020717

$BBg@P$G$9!#(B

From: daichi <daichi@jp.FreeBSD.org>
Subject: [java 132] Re: Java Memory Model
Date: Fri, 19 Jul 2002 16:36:14 +0900

> $BBgCO$G$9!#(B
(snip)
> $BFs$DL\$N$N(BURL$B$N2r@bJ8=q$K$"$k!V(BIt will work for 32-bit primitive
> values$B!W$N$H$3$m(B
> 
>   Although the double-checked locking idiom cannot be used for 
>   references to objects, it can work for 32-bit primitive values 
>   (e.g., int's or float's). Note that it does not work for long's 
>   or double's, since unsynchronized reads/writes of 64-bit 
>   primitives are not guaranteed to be atomic.
> 
>   // Correct Double-Checked Locking for 32-bit primitives
>   class Foo { 
>     private int cachedHashCode = 0;
>     public int hashCode() {
>       int h = cachedHashCode;
>       if (h == 0) 
>       synchronized(this) {
>         if (cachedHashCode != 0) return cachedHashCode;
>         h = computeHashCode();
>         cachedHashCode = h;
>         }
>       return h;
>       }
>     // other functions and members...
>     }
> 
> $B$,$A$c$s$HF0$/$C$F$$$&$H$3$m$N$/$@$j$,M}2r$G$-$J$$$C$9!#$3$N(B
> $BItJ,(B
> 
>       synchronized(this) {
>         if (cachedHashCode != 0) return cachedHashCode;
> 
> $B$GFs$D$N%9%l%C%I$,(Bsynchronized$B@aFb$KF~$C$F$-$F$bJRJ}$rCF$$$F(B
> $B$$$k$H$$$&$3$H$G$7$g$&$+!#(B

$B:G=i$K(Bsynchronized$B%V%m%C%/$KF~$C$F$-$?%9%l%C%I$K$h$C$F(B
computeHashCode()$B$,<B9T$5$l!"7k2L$,(BcachedHashCode$B$K(Bstore &
write$B$5$l$^$9!#(B
$B$=$N8e(Bsynchronized$B%V%m%C%/$KJL$N%9%l%C%I$,F~$C$F$-$F$b!"(B
cachedHashCode != 0 $B$NHf3S$NA0$K(Bread & load$B$,9T$J$o$l$k$?$a!"(B
$B:G=i$N%9%l%C%I$K$h$C$F7W;;$5$l$?CM$rI,$:F@$k$3$H$,$G$-$k(B
$B$H$$$&$o$1$G$9!#(B

> 32-bit primitive$B$K8B$k$H$$$&$N$O$I$&$$$&$3$H$+$7$i!#(B

32-bit primitive$BJQ?t$X$NBeF~$O(Batomic$B$G$"$k$3$H$,J]>Z$5$l$F$$$^$9!#(B
$B$=$N$?$a!"B>$N%9%l%C%I$+$i8+$?(BcachedHashCode$B$NCM$O(B0$B$+(B
computeHashCode()$B$N7k2LCM$N$I$A$i$+$G!"$=$l0J30$NCM$r(B
$B8+$k$3$H$O7h$7$F$J$$$N$G@5$7$/F0:n$9$k$o$1$G$9!#(B

64-bit primitive$BJQ?t$X$NBeF~$O!"(BJava VM$B$N<BAu$KBP$9$kBE6($N$?$a!"(B
atomic$B$G$"$k$3$H$,J]>Z$5$l$F$$$^$;$s!#$G$9$+$i!"%?%$%_%s%0$K$h$C$F(B
$BJQ$JCM$r;2>H$7$F$7$^$&$3$H$,$"$k$N$,LdBj$H$J$j$^$9!#(B

> # $B$3$N%3!<%I$r%Y!<%9$K$7$?$i0l1~LdBj$r2sHr$G$-$k(BDCL$B$J5-=R$,$G(B
> # $B$-$k$3$H$K$J$k$N$+$J!#(B

$B$$$$$(!"$G$-$^$;$s!#(B
$B$"$/$^$G(Bprimitive$BJQ?t$@$+$i$&$^$/$$$/$N$G$"$C$F!"(Breference$BJQ?t$N(B
$B>l9g$OJL$NJ}K!$r;H$&$7$+$"$j$^$;$s!#(B
# $B>-MhE*$K(B64-bit primitive$BJQ?t$X$N%"%/%;%9$b(Batomic$B$H$J$k$h$&$K(B
# $B=$@5$5$l$l$P!"(B64-bit primitive$BJQ?t$G$b(BDCL$B$,;H$($k$h$&$K(B
# $B$J$j$^$9$,!D!#(B

> P.S.
> DCL$BLdBj$N=$@5(B(JMM$B$rL@3N$K$7$F<BAu$rLdBj$,=P$J$$$h$&$KJQ99(B)$B$C$F(B
> $B8=:_$I$N>u67$K$"$k$+$4B8$8$NJ}$$$i$C$7$c$$$^$9$+!)(B

$B$=$b$=$b(BDCL$B<+BN$,IT@5$J%"%k%4%j%:%`$J$N$G$9$+$i!"(B
$B$H$j$"$($:$=$l$,F0$/$h$&$K(BJava$B$N;EMM$r$M$86J$2$k$H$$$&$N$O(B
$B$A$g$C$HJQ$@$H;W$$$^$9$h!#(B
$BC1$K!"(BDCL$B$r;H$o$J$1$l$P$$$$$@$1$NOC$G$9!#(B

--
$BBg@P>-K.(B
yamasa@ec.catv.ne.jp
