まつもと ゆきひろです

In message "[ruby-dev:14743] [BUG] $_ on thread switching"
    on 01/09/07, nobu.nakada / nifty.ne.jp <nobu.nakada / nifty.ne.jp> writes:

| 関数の中からThread#runを使うと、そのスレッドとスコープを共有
|する親スレッドの$_, $~が、子スレッドのもので上書きされてしまい
|ます。でも逆や、直接runしたときは起きません。1.4,1.6,1.7全て同
|様です。

分かりました。main_threadが関数の中にいる(のでruby_scopeや
lastlineもその関数の内部を指している)ときに別スレッドが
main_threadの上のスコープでコンテキストスイッチを行ってしま
うと、上のスコープではmain_threadの書き戻しが行われないため
に、書き換わってしまいます。

これを解決するいい方法はちょっと思いつきません。そもそもスコー
プローカルかつスレッドローカルってのに無理があったか。

                                まつもと ゆきひろ /:|)