In message <199803020830.RAA24331 / picachu.netlab.co.jp>
matz / netlab.co.jp (Yukihiro Matsumoto) writes:

>    % ruby -e 'Thread.stop; p 5'
>    5
> 
> ....ブロックしません. ^^;;;

    % ruby -r thread -e 'm=Mutex.new; m.lock; m.lock; puts "a"'
    % ruby -r thread -e 'q=Queue.new; q.pop; puts "a"'

  はどちらもブロックするんですよね. Mutex の方は busy wait のコードが
  入っているからわかるんですが, (while (Thread.critical = true;
  @locked)....end)Queue のほうは.... あ, よくみたら `until item' って
  書いてある.... (^^;

  # つまり Queue に nil を push してもスレッドは解放されない, と.

> つまり,rubyのスレッドライブラリがスレッドがmain一つしか無い
> 時にはブロックしないのが原因ですね.これはどうあるべきなんで
> しょうか.> 識者の皆様
> 
>   (1) 永遠にブロックする
>   (2) エラーになる
>   (3) その他

  Modula-3(もしくは Obliq)のライブラリだと同じスレッドが同じ mutex 
  を acquire するとエラーになるようですが....  SR も同じ. あんまり関係
  ないですね.  この際.

  エラーになるか(例外の名前/文が.... (^^;), 無視する(現状通り?/warning
 でも出すとか)というのが無難なところでしょうか.

  # 永遠にブロックしてくれても別にうれしくないし.

======================================================================
  柳川 @ 情報システム学研究科 . 電気通信大学
  katze / yuba.is.uec.ac.jp                             March  2, 1998
アリオッチ, アリオッチ, 血と魂を御身に捧ぐ!