また、黒田です。 >まつもと ゆきひろです > >|黒田です。 > >|について。system(とっても重いelispプログラム) を呼ぶ thread >|が処理を奪ったままなので, 試しに(懲りずに)fork を狭んでみると >|うまく行きました。そんなもんなんでしょうか。 > >systemがwaitでブロックしちゃうせいですね.ほとんどバグの領域 >だと思います.次のリリースで修正しようと思います. ruby - version 1.0-970528 (i686-linux) & Linux 2.0.30 で write でブロックしているようです。以下のプログラムで(a0.gz は 800KB程度) - -- def main_a for i in 1..20 sleep(1) print i, "\n" end end def main_b sleep(3) print "start\n" fi = open("/usr/home/jkuro/tmp/a0.gz", "r") a0 = fi.read fi.close print "end0\n" fi = open("/usr/home/jkuro/tmp/a1.gz", "w") fi.write(a0) fi.close print "end1\n" end if TRUE #if FALSE a = Thread.new{ main_a } main_b while a.alive? end else a = Thread.new{ main_a } b = Thread.new{ main_b } while a.alive?||b.alive? end end - -- の結果が l.21 のifを使う場合 -TRUE -- 1 2 start 3 end0 end1 4 (略) 20 - -- となり、end0 と end1 の間に main_a の処理が行なわれてません。 特に困るわけではないですが、l.22 のifを使う場合は -FALSE -- 1 2 start 3 (略) 12 end0 end1 13 (略) 20 - -- となります。(こっちのほうが嬉しいかな) - -- 黒田 淳 (くろだ じゅん)