原です。

> raise 文字列
> raise 例外
> raise 例外, 文字列
> raise 例外クラス, 文字列

この仕様は ruby の中で最も複雑なものの一つですね。というか
それだけ多くの機能が込められているわけだけど。


ところで、Thread#raise ですが、まず

-----^ test1.rb
#!/usr/local/bin/ruby
x = Thread.start {sleep}
x.raise
-----$ test1.rb

で、

./test1.rb:3:in `raise': Wrong # of arguments (0 for 1)
        from ./test.rb:3

となって、仕様が関数の raise とくい違っています。次に、

-----^ test2.rb
#!/usr/local/bin/ruby
x = Thread.start {}
x.raise "test"
-----$ test2.rb

の様に死んだスレッドに raise すると、処理が返ってこなくな
ります。更に、カレントスレッドに raise すると、

-----^ test3.rb
#!/usr/local/bin/ruby
x = Thread.current
x.raise "test"
-----$ test3.rb

./test3.rb:3: [BUG] unsaved context
IOT trap/Abort

ということになります。


あと、例の timeout イテレータですが、TimeoutError を該当
スレッドで捕捉できないことがたまにあって、、、これは調査
中です。