Ruby在线程中循环

时间:2010-10-17 18:39:06

标签: ruby multithreading loops sleep

我在一年前发布了完全相同的问题: Ruby Loop Failing in Thread

这里是代码(与上面的主题几乎相同)

 class NewObject
    def my_funk
        t = Thread.new {
            until false do
                puts sleep 15 # sleeps way too much
            end
        }
        t.join
  end
end

if __FILE__ == $0
    s = NewObject.new()
    s.my_funk
end

这是输出:

15
42
36
38
33
45
42
33
32
40

代码基本上打印了睡觉的实际秒数。 有谁知道这里发生了什么以及如何解决它?

我正在运行Windows 7和Ruby 1.8.7

1 个答案:

答案 0 :(得分:0)

如果我没弄错的话,睡眠是使用本机系统调用实现的,并且可能会干扰由VM管理的ruby green线程。这也可以解释为什么JRuby和1.9不会遭遇同样的问题......