[ruby-list:49301] Re: 例外を飛ばすThread内ではpassをしないとそのThreadはjoinできないことがある?

From: KOSAKI Motohiro <kosaki.motohiro@...>
Date: 2013-03-27 19:28:12 UTC
List: ruby-list #49301
(3/27/13 8:51 AM), Isamu Mogi wrote:
> こんにちは。茂木と申します。
> 
> Threadに関する質問です。
> るりまのThreadのページ http://doc.ruby-lang.org/ja/2.0.0/class/Thread.html に
> 下記のような記述があるのですが、
> 
> ----------
> ■例外発生時のスレッドの振る舞い
> (snip)
> t = Thread.new do
>   Thread.pass # メインスレッドが確実にjoinするように
>   raise "unhandled exception"
> end
> t.join
> ----------
> 
> Thread.passのコメントは、「内部で例外を発生させてそれをrescueしないままにするThreadでは、
> 明示的にpassを実行しないと親Threadにjoinができない可能性がある」という解釈で正しいで
> しょうか?

サンプルが間違ってるだけじゃないかな。Thread.passはあくまで一回パスにすぎないので、
一回パスしたことによって、メインスレッドが t.join の行までたどり着けるかは保証されてない。
まあ、もっともこの高々5行のコードで辿りつけないような状況・OSは思いつかないけれども。



In This Thread