From: Yuji Shigehiro Date: 1997-10-31T11:52:56+09:00 Subject: [ruby-list:5191] Is tcl/tk C library thread safe ? (Re: ) しげひろです. > Date: Fri, 31 Oct 97 10:35:27 +0900 > Subject: [ruby-list:5190] Re: listbox:curselection > Message-Id: <199710310148.KAA12567@picachu.netlab.co.jp> > |> ちなみに1.1b0ではtk.rbは重弘さんのtcltklibを使ったものになり > |> ます. > |うれしいです. 今の tcltklib の仕様のままだと, もっと嬉しいです (ruby > |のバージョンアップの時に毎回, 手で ext/ にコピーしなくて済むので...) > 仕様は一緒です.ですからtcltk.rbも動作します 感謝!!!! です. > 英語のドキュメ > ントがあるとすごーく嬉しいんですけど 検討課題ということで... (^^; ---- > |もし, tcl/tk の C ライブラリが再入可能(?)ならば, これは thread safe と > |いって良いのでしょうか? > > でしょうね.でもtclの問題は痛いですねえ.あれはインタプリタ > というデータ構造を大域変数のように使っていますから,なかなか > 再入可能にするのは難しいでしょう. これはどういうことなのでしょう?? 1. tcl, tk の C ライブラリでは, インタプリタはオブジェクト扱い(と言え ば良いのか??) で, 複数生成することもできるようです. (実際, tcltklib に つけた sample0.rb では, 複数生成しています.) ただし, もちろんイベント ループ (Tk_MainLoop) 大域変数扱い(?) で一つだけです. これが問題なので しょうか??? 2. man Tcl_Eval すると, During the processing of a Tcl command it is legal to make nested calls to evaluate other commands (this is how con- ditionals, loops, and procedures are implemented). とあります. すなわち, 再入可能なのではないかと... 3. ruby の thread は, ruby インタプリタが制御を握っている時にしか, task switch が起きないわけですよね. すなわち, tcl, tk ライブラリが制御 を握っている怪しげなタイミングで task switch が起きることはないと... 1. はどうでも良いと思いますが, 2. と 3. を考えると, tcl, tk の C ライ ブラリは ruby の thread に対しては safe と言って良いと思うのですが. --- 重弘裕二 阪大情報処理教育センター (sigehiro@rd.ecip.osaka-u.ac.jp) 阪大工情報システム白川研 (sigehiro@ise.eng.osaka-u.ac.jp)