ruby19 mutex+Threadおかしい?

Ruby19ネタ。 2本目のスレッドを生成して Mutex#synchronize で制御しあおうとしても, 片っぽの方しか実行されない。

mutex.rb

#!/usr/bin/env ruby
# coding: euc-jp
require 'thread'

m = Mutex.new
x = 1
t = Thread.new do
  # ここは子のみが実行するところ
  5.times do
    m.synchronize {
      x=5; sleep 0.2
    }
  end
end
while t.alive?
  m.synchronize {
    STDERR.printf("x=%dに1足すと:", x)
    sleep 0.05
    x += 1
    STDERR.printf("%d\n", x)
  }
end
t.join

Ruby19だと子スレッドの方に制御が行かない。なじぇ。

5/16追記

Mutex#synchronize を持ち出すと、明示的に Thread.pass しないと 別スレッドに制御が行かなくなるようだ。Monitorも同じ。 各スレッドに Thread.pass を追加したらRuby18での挙動と同じになった。

#!/usr/bin/env ruby
# coding: euc-jp
require 'thread'

m = Mutex.new
x = 1
t = Thread.new do
  # ここは子のみが実行するところ
  5.times do
    m.synchronize {
      x=5; sleep 0.2
    }
    Thread.pass
  end
end
while t.alive?
  m.synchronize {
    STDERR.printf("x=%dに1足すと:", x)
    sleep 0.05
    x += 1
    STDERR.printf("%d\n", x)
  }
  Thread.pass
end
t.join