[前][次][番号順一覧][スレッド一覧][生データ]

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]