From: matz@... (Yukihiro Matsumoto) Date: 1997-10-31T13:07:08+09:00 Subject: [ruby-list:5193] Re: Is tcl/tk C library thread safe ? (Re: ) まつもと ゆきひろです In message "[ruby-list:5191] Is tcl/tk C library thread safe ? (Re: )" on 97/10/31, Yuji Shigehiro writes: |しげひろです. |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). | |とあります. すなわち, 再入可能なのではないかと... ええと,単一スレッドでTcl_Evalが呼び出せるという意味では再入 可能であるといえるのでしょうけど,スレッドがあるとプログラム の任意の位置で割り込まれる可能性があるのでかなり厳しいです. ただし, |3. ruby の thread は, ruby インタプリタが制御を握っている時にしか, |task switch が起きないわけですよね. すなわち, tcl, tk ライブラリが制御 |を握っている怪しげなタイミングで task switch が起きることはないと... これは確かに事実なんで大丈夫かも知れないなあと思ってはいます. 実際のところどうなんでしょうね. |1. はどうでも良いと思いますが, 2. と 3. を考えると, tcl, tk の C ライ |ブラリは ruby の thread に対しては safe と言って良いと思うのですが. そうかもしれないなあ. まつもと ゆきひろ /:|)