From: Christoph (news_chr) Date: 2004-01-16T07:46:39+09:00 Subject: Re: Nested scopes and the Singleton pattern nobu wrote ... > > > Just using Thread.critical. And seems close to your idea > > > excepting for it uses "instance" method rather than "new". > > Not accurate, it uses 3-state; before, during and after > creation, but I feel it should use mutex or something. You probably always need a 3-state if you want a self modifying first instance call (at least in some implicit way). Here is a mutexy version of singleton.rb I wrote some time ago - it is probably more robust then the current code but equally obscure - sorry ... /Christoph begin 666 singleton.diff M+2TM('-I;F=L971O;BYR8BYO;&0),C P,RTP."TR,B Q,#HP.3HU."XP,# P M,# P,# @*S R,# **RLK('-I;F=L971O;BYR8@DR,# T+3 Q+3$U(#(S.C$W M.C4X+C8S,C,Y-S8P," K,#$P, I 0" M,2PS-C @*S$L,S(Q($! "BTC(%1H M92!3:6YG;&5T;VX@;6]D=6QE(&EM<&QE;65N=',@=&AE(%-I;F=L971O;B!P M871T97)N+@HM(PHM(R!56EN9RD@=&AE M(&-L87-S(&UE=&AO9',*+2,@*B @2VQA0HM(R @("!I;FAE M6EN9R H;F]R;6%L;'D@=&AE(&9I2!I2P@8W5R7!E17)R M;W)S('1O('!R979E;G0@8VQO;FEN9R!O2!S=')I;FW-E;&8N M8VQA2!O9B!F:7)S="!I;G-T86YC92!C86QL+@HM("!& M:7)S=$EN'1E;F1I;F<@86X@;V)J96-T('=I=&@@4VEN9VQE=&]N(&ES(&$@ M8F%D(&ED96$*+2 @=6YD969?;65T:&]D(#IE>'1E;F1?;V)J96-T"BT@( HM M("!D968@87!P96YD7V9E871UWU]("-[ M:VQAVYU;5]O9E]I;G-T86YC97,H4V]M95-I;F=L971O;D-L87-S*7TB M( HM"BUA(#T@4V]M95-I;F=L971O;D-L87-S+FENU1HU1HT!L96%V M92YJ;VEN("<[("=]('=A6EN9R H M;F]R;6%L;'D@=&AE(&9I7!E17)R;W(L(")C M86XG="!C;&]N92!I;G-T86YC92!O9B!S:6YG;&5T;VX@(WMS96QF+F-L87-S M?2(-"BL@(&5N9 T**R @9&5F(&1U< T**R @("!R86ES92!4>7!E17)R;W(L M(")C86XG="!D=7 @:6YS=&%N8V4@;V8@2!O9B!F:7)S="!I;G-T86YC92!C M86QL+@T**R @1FERF5?8V]P M>2AO'1E;F1E9"AS=6)?:VQA&EN7!E17)R;W(L("));F-L=7-I;VX@;V8@=&AE($]/+5-I M;F=L971O;B!M;V1U;&4@:6X@;6]D=6QE("-[;6]D?2(-"BL@(" @96YD#0HK M(" @('-U<&5R#0HK("!E;F0-"BL@( T**R @9&5F(&EN8VQU9&5D*&ML87-S M*0T**R @("!S=7!E<@T**R @("!K;&%S'1E;F0@4VEN9VQE=&]N M0VQA'1E M;F1E9"AK;&%S&%M<&QE+@T**PT**V-L87-S(%-O;653:6YG;&5T;VY#;&%SVYU;7T@;V8@4V]M95-I;F=L971O;D-L87-S(&EN&-E<'1I;VXB M#0HK)'-T9&]U="YS>6YC/2!TR -"BL@(" @(" @(&)E9VEN#0HK(" @(" @(" @('-L M965P*')A;F0H,"XQ*2D-"BL@(" @(" @(" @5&AR96%D+F-UW-E;&9](&EN MF5?8V]P>2AOF4@9F%I M;&5D(&9OB ]($9O;RYC;&]N M90T**T)A>BYI;G-T86YC:6%T95]A;&P-"BL-"BL-"BMP=71S(")<;EQN(BPB M0W5S=&]M:7IE9"!M87)S:&%L;&EN9R(-"BMC;&%S7!E17)R;W(@/3X@;65S#0HK("!P=71S(&UE'1E;F1?;V)J96-T)R!F;W(@ A4VEN9VQE=&]N.DUO9'5L90T**V5N9 T**PT**V5N9 T* ` end