yarv-dev:947
From: SASADA Koichi <ko1 atdot.net>
Date: Tue, 21 Feb 2006 19:37:56 +0900
Subject: [yarv-dev:947] Re: open> block on exiting with living thread
ささだです。 U.Nakamura wrote: > こんにちは、なかむら(う)です。 > > 以下のコードを実行すると、Ctrl+Cすら効きません。 > > C:\>miniruby.exe -ve "Thread.new{}" > ruby 1.9.0 (2006-02-09) [i386-mswin32] > YARVCore 0.3.3 (rev: 415) [opts: ] > (ここで固まる) > > > 以下のように、joinしてやれば即座に終了してくれます。 > > C:\>miniruby.exe -ve "Thread.new{}.join" > ruby 1.9.0 (2006-02-09) [i386-mswin32] > YARVCore 0.3.3 (rev: 415) [opts: ] > > C:\> > > 一方、killの場合は素の場合と同様に固まります。 > > C:\>miniruby.exe -ve "Thread.new{}.kill" > ruby 1.9.0 (2006-02-09) [i386-mswin32] > YARVCore 0.3.3 (rev: 415) [opts: ] > (ここで固まる) 多分、この問題は解決したんじゃないかと思うんですが、いかがでしょうか。 問題は、生きているスレッドが、exit のための cleanup 中に、他のネイティ ブスレッドが終了処理中のデータをアクセスしてマズー、じゃないかと思いまし た。そのため、全部終了するまで待つようにしました(走っているスレッドは Thread#kill よりも激しい(ensure節を実行しない)終了処理が走って止まる。 sleep 中の奴らも Thread#kill と同様無理やりとめる。cygwin や mswin な ど、止まらない場合もある。拡張ライブラリで while(1){} とかされると絶対止 まんない)。 -- // SASADA Koichi at atdot dot net -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
890 2006-02-14 19:22 [usa garbagecollect.j] open> block on exiting with living thread -> 947 2006-02-21 19:37 ┗[ko1 atdot.net ] 949 2006-02-21 19:46 ┗[usa garbagecollect.j] close> Re: block on exiting with living thread 951 2006-02-21 19:56 ┗[ko1 atdot.net ] 952 2006-02-21 20:07 ┗[usa garbagecollect.j]