From: keiju@... (Keiju ISHITSUKA) Date: 1998-04-09T14:48:35+09:00 Subject: [ruby-list:7384] Re: [Q] Thread けいじゅ@日本ラショナルソフトウェアです. In [ruby-list :7376 ] the message: "[ruby-list:7376] [Q] Thread ", on Apr/08 18:44(JST) Keiju ISHITSUKA writes: >けいじゅ@日本ラショナルソフトウェアです. > >スレッドに関して, どうも良く分からないので教えて下さい. > >irbの話しなのですが, 内部で新しいirbを立ちあげる時にthreadを起動してい >ます. 子を立ちあげると, 親irbはThread.stopします. そして, 子irbを抜け >ると, 親irbをrunするようにしています. >この結果のように, Thread.critical==falseです. >こういうことって起こり得るんですかね? やはりスレッドの動作がおかしくなっていると思います. preemptiveなスレッドになっているみたいですよ. 以下のプログラムがマトモに動きません. tracerを使うと分かりますがth2だ けが走っているみたいです. ruby-1.1bは全部駄目みたいですね. ruby-1.0は持っていないから分かりませ ん(^^;;; ---- $stdout.sync = 1 $, = ", " $\ = "\n" $i = 0 $j = 0 th1 = Thread.new { Thread.pass loop do $i += 1 end } th2 = Thread.new { loop do $j += 1 end } th1.run th2.run ooi = 0 ooj = 0 loop do 1000.times {Thread.pass} oi = $i oj = $j print oi, oi - ooi, oj, oj - ooj, oi - oj, oi / (oj + oi) ooi = oi ooj = oj end __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---