[#30220] schedule for Ruby 1.8.6 — "Akinori MUSHA" <knu@...>

 ruby-core を読んでいない人もいると思うので、ここでもアナウンス

20 messages 2007/01/30

[ruby-dev:30147] Re: merge YARV

From: Hidetoshi NAGAI <nagai@...>
Date: 2007-01-19 02:01:21 UTC
List: ruby-dev #30147
永井@知能.九工大です.

From: SASADA Koichi <ko1@atdot.net>
Subject: [ruby-dev:30145] Re: merge YARV
Date: Thu, 18 Jan 2007 13:43:42 +0900
Message-ID: <45AEFAE4.8040201@atdot.net>
>  そういえば、rb_proc_new() は作りました。

ありがとうございます.

>  tcl/tk がネイティブスレッドに対してどのような対処をしているのかよくわ
> かっていないのですが、たとえばメッセージポンプ(あるのかしらん)と別ス
> レッドで動いちゃうとまずい、ってことになりますでしょうか。

私も良く分かってはいなかったので ;;;^_^;;; 調べていたのですが,

・インタプリタはそれが作成されたネイティブスレッドに拘束され,
  他のネイティブスレッドからのアクセスはできない.

・イベントキューはネイティブスレッドごとに個別に存在する.
  処理対象にできるインタープリタは,同じネイティブスレッド上のもののみ.

・他のネイティブスレッド上のイベントキューにイベントを送ることは可能.

というような感じです.

というわけで,TclTkIp オブジェクトにスレッド情報を持たせるとか,
イベントループの管理方法を変更しなければならないとか,
Tcl/Tk インタープリタの関数を直接呼ぶようにしていた部分は
すべて書き換えなければならないとか...
まぁ,いろいろとやらなきゃいけないことが多そうです.

シグナル処理についても何らかの対処が必要なように思うのですが,
tcltklib.c 上のみでうまくごまかせることなのか,
signal.c をいじる必要があることなのかを掌握できていません.
ただ,Tk を require しなくてもスレッドが絡んだ際に
シグナル処理の異常を生じることがあるようなので,
signal.c もこのままではまずそうな気はしています.

>  tk 使う人は、スレッドの使い方に注意しましょう、では難しい感じでしょうか。

ダメですね.
今のままでは require 'tk' を実行したスレッド以外で Tk を使おうとすると
全く動きませんから.

例えば

   require 'tk'; Thread.new{Tk.mainloop}

はダメですし,

   require 'tk'
   l = TkLabel.new.pack
   Thread.new{
     10.times{|i| l.text = i; sleep 1}
   }
   Tk.mainloop

のようなこともダメですので.
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai@ai.kyutech.ac.jp

In This Thread