From owner-java@jp.FreeBSD.org Sat Aug 31 02:54:54 2002
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) id g7UHssE15050;
	Sat, 31 Aug 2002 02:54:54 +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 g7UHsr315044
	for <java@jp.FreeBSD.org>; Sat, 31 Aug 2002 02:54:53 +0900 (JST)
	(envelope-from yamasa@ec.catv.ne.jp)
Received: from localhost by cs20.catv.ne.jp (8.9.1/3.7W)
	id CAA12373; Sat, 31 Aug 2002 02:54:50 +0900 (JST)
Message-Id: <20020831.025451.74754174.yamasa@ec.catv.ne.jp>
To: java@jp.FreeBSD.org
From: OISHI Masakuni <yamasa@ec.catv.ne.jp>
In-Reply-To: <20020830.195742.1025205368.shudoh@localhost>
References: <20020724192325.55472fab.daichi@ongs.co.jp>
	<20020727.052052.59459742.yamasa@ec.catv.ne.jp>
	<20020830.195742.1025205368.shudoh@localhost>
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
Date: Sat, 31 Aug 2002 02:54:51 +0900
X-Sequence: java 204
Subject: [java 204] 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+020829

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

# $B$3$3$7$P$i$/K;$7$+$C$?$s$G!"(BSolaris 9$B$N%9%l%C%I$NOCBj$K$O(B
# $B>h$jCY$l$F$7$^$$$^$7$?!D!#(B

From: shudo@computer.org
Subject: [java 200] Re: Java Memory Model
Date: Fri, 30 Aug 2002 19:57:42 +0900

> > $B$3$N$h$&$J;vBV$rHr$1$k$?$a$K$O!"%3%s%9%H%i%/%?Fb$G$NF0:n$,(B
>                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^
> > $B%a%$%s%a%b%j$KH?1G$5$l$k$N$rBT$C$F$+$i!"JQ?t(Bhelper$B$X;2>H$rBeF~$9$k(B
>   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (1)
> > $B$h$&$K$9$l$P$h$$$N$G$O$J$$$+!"$H;W$o$l$k$+$b$7$l$^$;$s!#(B
> > $B$7$+$7!"$=$l$G$b$^$@IT==J,$G$9!#(B
> 
> $B=<J,!?IT=<J,$H$$$&LdBj$G$O$J$/$F!"(B
>   $BJQ?t(B helper $B$X$NBeF~$r@h$K9T$&$3$H$,(B ($B8@8l;EMM>e(B) $B5v$5$l$F$$$k$N$G!"(B
>   $B$=$b$=$b!">e5-$N(B (1) $B$r6/@)$5$;$k$3$H$O$G$-$J$$!"(B
> $B$H$$$&M}2r$,@5$7$$$N$G$O$J$$$+$H;W$$$^$9!#(B

$B$($($H!">e5-$NItJ,$O(B(1)$B$r6/@)$G$-$k$h$&$K(BJava$B$N;EMM$rJQ99$7$F$bIT==J,$@!"(B
$B$H$$$&0UL#$G$9!#(B

$BNc$($P!"(BJava Memory Model$B$K$*$$$F(Bassign, store, write$B$N=g=x$E$1$r(B
$B6/@)$9$k%9%H%"%U%'%s%9L?Na(B SFENCE $B$rDI2C$7$?$H$7$^$9!#(B
$B$3$N(BSFENCE$BL?Na$O!"(BSFENCE$B$h$jA0$G<B9T$5$l$?A4$F$N(Bassign$B$KBP1~$9$k(B
store, write$B$,!"(BSFENCE$B$h$j8e$G<B9T$5$l$k(Bassign$B$KBP1~$9$k(Bstore, write
$B$h$j$bA0$K<B9T$5$l$k$3$H$r6/@)$9$k$b$N$H$7$^$9!#(B

$B$3$N(BSFENCE$BL?Na$rMQ$$$k$H!"(B(1)$B$r6/@)$9$k(BDCL$B$N%3!<%I$r(B
$B0J2<$N$h$&$K=q$/$3$H$,$G$-$^$9!#(B
---
class Foo {
   private Helper helper = null;
   public Helper getHelper() {
      if (helper == null) {
         synchronized (this) {
            if (helper == null) {
               Helper tmp = new Helper();
               SFENCE; // $B%9%H%"%U%'%s%9L?Na$NH/9T(B
               helper = tmp;
            }
         }
      }
      return helper;
   }
   // other functions and members...
}
---
$B$3$N$h$&$K$9$k$3$H$G!"(B#$B%a%$%s%a%b%j$KBP$7$F$O(B#$B%3%s%9%H%i%/%?Fb$G$N(B
$B=q$-9~$_$,H?1G$5$l$?8e$K%$%s%9%?%s%9$N;2>H$,JQ?t(Bhelper$B$X(B
$BBeF~$5$l$k$3$H$r6/@)$9$k$3$H$,$G$-$^$9!#(B

$B$7$+$7!"B>$N%9%l%C%I$,F1$8%a%b%j%"%I%l%9$NFbMF$r(B
read, load$B$9$k=gHV$O$3$N$H$*$j$H$O8B$j$^$;$s!#(B
$B$=$N$?$a!"B>$N%9%l%C%I$NB&$G$b(Bread, load, use$B$N=g=x$E$1$r(B
$B6/@)$9$k%m!<%I%U%'%s%9L?Na$r<B9T$7$J$$8B$j!"=i4|2=$,:Q$s$G$$$J$$(B
$B%G!<%?$r;2>H$7$F$7$^$&2DG=@-$,$"$k$o$1$G$9!#(B

synchronized$B%V%m%C%/$O!"$=$NF~8}$G%m!<%I%U%'%s%9L?Na$r!"(B
$B=P8}$G%9%H%"%U%'%s%9L?Na$rH/9T$7$?$N$HF1$88z2L$r$b$?$i$9$N$G!"(B
$B3N<B$J=i4|2=$r$*$3$J$&$K$O(Bsynchronized$B%V%m%C%/$r(BDCL$B$G1*2s$7$F$O(B
$B$J$i$J$$$H$$$&$o$1$G$9!#(B


$B$A$J$_$K!"(BPOSIX$B%9%l%C%I$,Dj5A$9$k%a%b%j%b%G%k$b(BJMM$B$H$[$H$s$IF1$8$G$9!#(B
# $B$H$$$&$h$j!"(BJMM$B$,(BPOSIX$B%9%l%C%I$r;29M$K$7$F:n$i$l$?$s$@$H;W$$$^$9!#(B
$B$=$N$?$a(BPOSIX$B%9%l%C%I$rMQ$$$?%W%m%0%i%`$G$bF1MM$NLdBj$,H/@8$9$k(B
$B$3$H$,$"$j$^$9!#(B
IA-32$B%"!<%-%F%/%A%c$G$O(Bcache coherency$B@)8f$K$h$j!"(BPOSIX$B$,MW5a$9$k$b$N(B
$B$h$j$bMZ$+$K7xO4$J%a%b%j%b%G%k$H$J$C$F$$$k$N$GIaDL$O5$$E$-$^$;$s$,!"(B
$BB>$N%"!<%-%F%/%A%c$G$O%a%b%j$N=q$-9~$_!&FI$_9~$_=g=x$K0MB8$7$?(B
$B%W%m%0%i%`$,$&$^$/F0$+$J$$$H$$$&$3$H$,5/$3$j$&$k$o$1$G$9!#(B

$B$=$N$?$a!"(BPOSIX$B%9%l%C%I$G$O(BMutex$B$N%m%C%/$r2p$9$k$3$H$G(B
$B%a%b%j$NJQ99FbMF$,3N<B$KEA$o$k$3$H$rMW5a$7$F$$$^$9!#(B
$B<BAu%l%Y%k$G8@$&$H!"(Bpthread_mutex_lock$B$G$O%m%C%/$N<hF@$K0z$-B3$$$F(B
$B%m!<%I%U%'%s%9L?Na(B($B$^$?$OF1Ey$NL?Na(B)$B$rH/9T$7!"(Bpthread_mutex_unlock
$B$G$O%9%H%"%U%'%s%9L?Na(B($B$^$?$OF1Ey$NL?Na(B)$B$rH/9T$7$?8e%m%C%/$r2rJ|(B
$B$7$F$$$^$9!#(B

# $B$J$*!"(BIA-32$B$G$b(BMTRR$B5!G=$K$h$j%-%c%C%7%e$N@)8f$,2DG=$K$J$C$F$$$?$j!"(B
# SSE/SSE2$B$G%a%b%j%U%'%s%9L?Na$,DI2C$5$l$?$j$7$F$$$^$9!#(B
# $B$3$l$i$N5!G=$O!"%0%i%U%#%C%/%+!<%IEy$N@-G=$r%U%k$KH/4x$5$;$k$?$a$K(B
# $BDI2C$5$l$?$s$@$H;W$$$^$9!#(B

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