From: keiju@... (Keiju ISHITSUKA) Date: 1997-07-25T11:57:29+09:00 Subject: [ruby-list:3465] Finalizer and new Mutex_m release けいじゅ@今はフリー(^^;;です. FinalizerとMutex_mの新版をリリースします. Finalizerとは, あるオブジェクトがGCされる時にある依存オブジェクトに対 してメッセージを送る機能です. Finalizerの使い方: 1. require "finalizer.rb" する. 2. Finalizer.add(obj, dep[, method = :finalize]) オブジェクトobjに対して依存オブジェクトdepとobjがgcされる時に起動され るメソッドを登録する(起動されるメソッドのデフォルトはfinalize). これを行うだけです. objがGCされると, 3. dep.method(object_id_of_obj) 依存オブジェクトに対して, objのオブジェクトIDを引数として先ほど登録し たメソッドをセンドします. 注意事項: 1. あくまでもあるオブジェクトがGCされる時に呼び出されるものであり, そのオ ブジェクトに対する参照がなくなったからといって呼び出されるとは限りませ ん. 2. ただし, 依存オブジェクトは全て登録されているので, プロセス終了時に依存 オブジェクト全てに対してfinalizeすることは可能です. Finalizer.safe{Finalizer.finalize_all} を行うと登録した全てのオブジェクトに対して, finalizeを行います. Mutex_mの新版について: 1. Finalizerを用いたサンプルも兼ねています. Mutex_mは静的変数にロック情報 を保存していました. したがって, Mutex_mをextendしたオブジェクトがGCさ れてもそのロック情報が残ってしまうという問題点がありました. それを, Finalizerを用いて解決しています. 2. 旧版, Mutex_mはロック情報の保持に全て静的変数を用いていました. 実際に は, インスタンス変数を持つことができないオブジェクトに対してのみそうす る必要があって, そうでないオブジェクトに関しては, インスタンス変数でロッ ク情報を管理することができます. 新版では, そのオブジェクトがインスタンス変数を持てるかどうか判断して, 実際の実装形態を変更するようにしました. これによって, 上記のFinalizer を無闇に使わなくても済むようになりました. PS. 松本氏へ: 旧版のMutex_mを破棄して新版と入れ替えて下さい. --ソースここから-- begin 644 fin.tgz M'XL(`!@3V#,``^T:W6_;QCVOTE]QL(-&,F1*LA,'5>LY19LL:5,,B).]!(9` M4R>;,46J1]*.EN2/67=Y6]%T2!%O69&MV]RLV9P`PX"\#7O84PH4"/:X#?T= M[T@>OR1*B9MLNY\#2;S[?7_=!],W;=TR?X*)1C:/'1&T6ZV5DR?1,816EI:6 MY6\&[>63K1486EY9:;7;R^TV#+6!Y!AJ'95",OBNIQ.$CNU@\YK_?0A\O6"^ M.@\QZ$M9@!91,%8Y?@E;6']%ZOYFQ>:Z`>'F*[I]M>`PVPM^WTT"KJA`8TT((S M].HA19__^(O?"=UZX"@/,YRN M0[IF;X*F6-4EYT?2X-5_=>T:?T&_HLX@; M?0ZD(1OZ2_I,2RHS5;P#X0LEY8X1.DLZR(8OS"9>EXV>E"["UAE%29*`X[FP M==)'?WCR^`']G#'@*5;`1J2:J_?Q#4V[!3RVC/O_H8]B3C___-.#.PR5'M+G M]_]&_Q[(AK_JP.GY%D81:A6A2^^N=R^\MWIB\?AYK/Z@36# M)4GD`,:(XT0<^`\-;/)M"[MN.+!CVKVNTU^KG3.OV_Z`4^FNZQA`E#5]0S,< MV]"]6J2%V6<:`[+DO*L@'T1M5/E^"":TH>]N<[[!(+9<+&9SZ)CH`)=S@-EJ M^`D&ZB[S6\IWTP0@:*(\`-DEJT1W"\QF8Z;L4+/`F;.%H.\0$0;33K@H=FLP MK0D+6!B<:N4F:#]@27*S6@&9J[$IZ(TWT("-<*F"!W=J*@R")[BBSL++Y>#! MT!NM%<2#$V2]F1.5P@4X$9!4HT]U^/_*`+PLCQ>D>>Y.(>'3:=:Q%_,;8":= MINW@D1MU`V%J3IW5)UI;L"7*)$_1@CF%BB62L$#3Z;<]\6H:L&&K(S*C.]=%4!ZN0TL]%R>OW-B.]NN,A71_XT> M5R9^1]#Z7FR#G8K$:](9HZ/:]+UQYOV_\$2IP\941LS2/?-.'@>43CI]9.M* M4K61WZ-";0&G8'_/"#@I9'F((K)=H)D]>3\N)[CH>X:%=9)O:Z3N`J+/[WP) M%C[:/Z!_^>()F/0`SD>'M^GM@]O?_/37MQ\(`]GQ*N#E6+VNZ^F>[T(*7MXF M<$C2#&)Z)IP"`H34&,.Z=.5LYM!`\,#9Q=*QXA8'ON7/2L MQ%C)I-T2N_D$._J4'K*HWWWZX)]R2*&.6',(#QLBFJL%/>1(XYH*HJ0!Z'-> M=[88&&)?-VZ:O9L)2]AA<:)3`8>?C+M]WS8\T[%1!Q`+AC.K50:) M>ZAX)LFA""E9TV,0Y18R@5\*-0\[],ZXN0EZ%;2EL:B3C"CNFI,TR`VOJ.]" M6D@?F!L2_BQIK9E>`"VU!4:P/A)SBU4?ZA-GP.6" MU*G?#Z'X[1`<;S[R38+17&S%'`S#F0,6%;YT!"M-,*3AZQZ4//J0X\*@IFGP MN?\/^C@8HP\//J/[]Q]2^O6_V8UKQ#U:=.:B:]B0"5]_Q9.0T'4"R?'E(JS& M?'\+FWU8\$$[6'793D-^/O?.Q?7$@&U:B#^)U97H)@3E\FB(SQ+BD`::$W*1 MH=LG/"3L\QSD;9LN"AI?;?X&,]T#HEOU.;XXQU>*FQ@B4JW@78C*7("/WGX[ MD%BIG!GX7;)VSB%=:+,#V,O`]HA;'6X%"'8-7](V0[B% M;4Q8+TZ0%>P@F)-!'TZ..8HX2<#&&^*#>VN(:[N&=%NHG)C)&08.^1,>&74+ MIMR1;6P3QX[..*!ETGTNMOK5"C\N2(<#L>$.C#*?X7CD38P$_X. MYR1UV+3T6)6"5NS1-`'/"$X:JL>?XHTNMEV?X!A):)LC)'QGD0DW+PO;L/R> M7$L!$=;6^%7&7.8>13E/E(D?QC*K&M[R0OQ@<PK`!9 M/*"5+R,E,]G]@Y/BT1"&80.VW%MDV;3J4,80>V/78T8RRKE3V-^';&1VEK MQ9=4CNFV75B0'_K=BZ&6TLDM5:EI=K/7*HHO-[3H/W[DB6B@#M`F[YLRA9ZK MFT0FG83'!A=6+GP'4E#=:L`4``` ` end __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju@bc.mbn.or.jp <<---