佐藤@東邦大です。

スレッドについての質問です。

複数の終了タイミングの異なるスレッドを起動し、最後のスレッドが終了する
まで待つプログラムが必要になったので、どうやったらいいか考えながら書い
てみたのですが、

#!/usr/local/bin/ruby

# Threadクラスの実験、どうやってスレッドの終了を待つか

tarray = Array.new

srand

(1..5).each { |n|
  tarray << Thread.start {
    t = rand(10)
    
    print "Thread #{n} is waiting #{t} secs.\n"
    sleep t
    print "#{n}: end\n"
  }
}

while tarray.size > 0
  tarray.each { |t|
    if not t.alive? then
      tarray.delete(t)
    end
  }
end

ti = Time.times
print "user: #{ti.utime}\nsystem: #{ti.stime}\n" +
      "cuser: #{ti.cutime}\nsystem: #{ti.cstime}\n"
    
5つのスレッドを起動し、while節で待ちます。

でもこれだと、終了待ちしてるときにCでいうところのfor(;;);と同様にCPUを
喰いつくすように見えます(実際そんな感じみたい)。
どのようにすると喰いつくさない待ちを実現できるのでしょう。

あと、待っている側で特定のスレッドが終了したことを検知する方法はどうい
うものがあるのでしょうか。

Linux 2.0.33でのruby 1.1b8です。

===
佐藤 大輔/densuke / ga2.so-net.or.jp(or CQD00116 / niftyserve.or.jp)
Application/MS-* パート付きメールと化け化けメールはいや〜ん