【发布时间】:2012-02-01 23:39:16
【问题描述】:
解决方案:在 .irbc 文件中,输入:IRB.conf[:USE_READLINE] = false
我正在运行一些 ruby 代码:
Thread.new do
loop do
a = @queue.pop
puts "1"
puts "2"
end
end
当我在 irb 中运行它时,队列弹出,它打印“1”,但不会立即打印“2”。在它吐出“2”之前,我必须按几次 Enter。这是为什么呢?
这是我的 irb 日志:
>> Thread.new do
?> loop do
?> a = @queue.pop
>> puts "1"
>> puts "2"
>> end
>> end
=> #<Thread:0x10ae6d1a0 sleep>
>> @queue << "something random"
1=> #<Queue:0x10aed6420>
>>
?>
?>
?>
2?>
这是我得到的:
>> require "thread"
=> true
>>
?> @queue = Queue.new
=> #<Queue:0x101bc9a60>
>>
?> Thread.new do
?> loop do
?> a = @queue.pop
>> puts "1 was printed at #{Time.now.to_f}"
>> puts "2 was printed at #{Time.now.to_f}"
>> end
>> end
=> #<Thread:0x101bb8058 sleep>
>>
?> @queue << 42
1 was printed at 1328144684.33667=> #<Queue:0x101bc9a60>
>>
?>
?>
?>
2 was printed at 1328144686.4642?>
【问题讨论】:
-
您的 Ruby 版本是否在编译时启用了线程支持?
-
@andrewdotnich:你为什么要删除 OS X lion 标签?
-
@AndrewGrimm:因为我可以在雪豹上复制它。这可能是 *nix 实现的问题,但不是仅限于 Lion……
标签: ruby multithreading