けいじゅ@日本ラショナルソフトウェアです.

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 <<---