卜部です。
以下のスクリプトを実行すると、手元では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