卜部です。

以下のスクリプトを実行すると、手元ではt2のループ
が一回しか回らないのですが、意図された挙動なんで
しょうか?
"loop { t1.wakeup }"の行をコメントアウトすれば、
ちゃんと毎秒t2が動いてることを観測できるのですが。

require "monitor"
extend MonitorMixin

def x(n)
	synchronize do
		x(n-1) unless n.zero?
	end
end

t1 = Thread.start do
	i = 0
	loop do
		x(i)
		i += 1
	end
end

t2 = Thread.start do
	loop do
		synchronize do
			sleep 1
			p Time.now
		end
	end
end

loop { t1.wakeup }
sleep