けいじゅ@SHLジャパンです. 

In [ruby-list :01272 ] the message: "[ruby-list:1272] Re: thread and
$1 ", on Dec/12 16:09(JST) matz / caelum.co.jp (Yukihiro Matsumoto)
writes:

>以下のものはグローバル変数のようにみえますが,実はローカル変
>数です(マニュアルにも書いてあります).
>
>  $_ $~ $& $` $' $+ $1 $2 ...
>
>以下のものはスレッドローカル変数です.
>
>  $@ $!
>
>ですから,心配ないです.ちなみに現状ではユーザレベルでスレッ
>ドローカル変数を定義できません.ごめんね.

ん? そうすると以下のプログラムの動作は, おかしくないのですか??

----ここから---
$stdout.sync = 1
$, = ", "
$\ = "\n"

th1 = Thread.new {
  old = nil
  loop do
    "aa" =~ /(.)/
    Thread.pass
    if old != $1
      old = $1
      print $1
    end
  end
}

th2 = Thread.new {
  loop do
    "bb" =~ /(.)/
    Thread.pass
  end
}

th1.run
th2.run

old = nil

"zz" =~ /(.)/
sleep 10000

---ここまで

実行結果は:

a
b
a
b
:

となります. こういう動作は困り物だと思うのですが??

もう1つ:

sleep 1000
の変わりに
Thread.exit

するとコアダンプします.

__
..........................................石塚 圭樹@SHLジャパン(株)...
------------->アドレス変わりました!! e-mail: keiju / shljapan.co.jp <----