【发布时间】:2011-03-17 16:57:40
【问题描述】:
我正在尝试编写一些小的超时代码:
t = Thread.new { sleep 3 } # <- The thread that will do stuff.
Thread.new { sleep 2; t.kill; p 'hi!' } # <- The thread that will kill it after two seconds.
t.join
如果第一个线程在两秒内完成它的工作,它将停止,主线程将无事可做。这将导致程序在第二个线程到达t.kill 部分之前退出。但是,当我运行这段代码时,"hi!" 会被打印两次。用puts 替换p 可以修复它。为什么会这样?
【问题讨论】:
-
@Marc:我发现如果你在终端中输入
ruby(不带参数)并粘贴代码并按下Control-D,"hi"只会打印一次。但是如果你真的把代码放到一个文件中,然后做ruby test.rb之类的事情,它就会发生。我认为这可能与 ruby 读取文件的速度与 ruby 读取标准输入的速度有关。 -
绝对是一个错误。
ruby somefile.rb大部分时间会打印两次,它是间歇性的。可以在 redmine.ruby-lang.org 上归档吗?你可以为ruby -v指定“ruby 1.9.3dev (2010-07-19 trunk 28679) [x86_64-darwin10.4.0]”,因为我已经用主干复制了这个。或者让我知道,我会提出问题。
标签: ruby multithreading timeout