Ruby多线程问题
我已经开始研究Ruby中的多线程 所以基本上,我想创建几个线程,并让它们全部执行,但在线程成功完成之前不显示任何输出 例如:Ruby多线程问题,ruby,multithreading,Ruby,Multithreading,我已经开始研究Ruby中的多线程 所以基本上,我想创建几个线程,并让它们全部执行,但在线程成功完成之前不显示任何输出 例如: #!/usr/bin/env ruby t1 = Thread.new { puts "Hello_1" sleep(5) puts "Hello_1 after 5 seconds of sleep" } t2 = Thread.new { puts "Hello_2" sleep(5) puts "Hello_2 after 5 seconds of slee
#!/usr/bin/env ruby
t1 = Thread.new {
puts "Hello_1"
sleep(5)
puts "Hello_1 after 5 seconds of sleep"
}
t2 = Thread.new {
puts "Hello_2"
sleep(5)
puts "Hello_2 after 5 seconds of sleep"
}
t1.join
t2.join
puts "Hello_3"
sleep(5)
puts "Hello_3 after 5 seconds of sleep"
第一个Hello_1/Hello_2立即执行。在线程成功完成之前,我不希望显示任何输出。因为将打印内容放入单个输出流(sysout),如果要捕获每个线程的输出,就不能使用它 您必须为每个线程使用单独的缓冲流,在每个线程中写入缓冲流,然后在线程终止时将它们转储到sysout以查看输出 下面是一个线程示例:
t = Thread.new() do
io = StringIO.new
io << "mary"
io.puts "fred"
io.puts "fred"
puts io.string
end
您可以共享缓冲区,但应“同步”对其的访问:
buffer = ""
lock = Mutex.new
t1 = Thread.new {
lock.synchronize{buffer << "Hello_1\n"}
sleep(5)
lock.synchronize{buffer << "Hello_1 after 5 seconds of sleep\n"}
}
t2 = Thread.new {
lock.synchronize{buffer << "Hello_2\n"}
sleep(5)
lock.synchronize{buffer << "Hello_2 after 5 seconds of sleep\n"}
}
t1.join
t2.join
puts buffer
buffer=“”
lock=Mutex.new
t1=线程。新{
锁定。同步{buffer你能提供一个简单的例子吗?我在别处找不到任何关于这个的东西。链接的博客文章不再可用。你还有代码吗?你能把它放进要点并更新答案吗?@Schneems,不,对不起,我没有。谢谢你!我更喜欢grillp的例子,因为我没有共享任何缓冲区。不过这确实有效,谢谢。
buffer = ""
lock = Mutex.new
t1 = Thread.new {
lock.synchronize{buffer << "Hello_1\n"}
sleep(5)
lock.synchronize{buffer << "Hello_1 after 5 seconds of sleep\n"}
}
t2 = Thread.new {
lock.synchronize{buffer << "Hello_2\n"}
sleep(5)
lock.synchronize{buffer << "Hello_2 after 5 seconds of sleep\n"}
}
t1.join
t2.join
puts buffer