在Ruby中,我希望有两个线程同时运行,并希望后台线程定期发出前台线程的信号。如何在后台线程显示“go”之前阻止前台线程阻塞?我可以想到几种方法,但是我选择了最合适的惯用Ruby方法。
在代码中:
loop do # background, thread 1
sleep 3
receive_input
tell_foreground_input_is_ready # <-- how do I do this?
end
和
loop do # foreground, thread 2
wait_for_signal_from_background # <-- how do I do this?
do_something
end
(注意:背景可能会多次向前景发出信号。每次前景完成等待,它会重置积压。)
答案 0 :(得分:1)
答案 1 :(得分:1)
事实证明这很有效:
require 'thread'
queue = Queue.new
Thread.new do
100.times do |i|
sleep 1
queue.enq i
end
end
loop do
print "waiting... "
puts queue.deq # this function blocks.
end
答案 2 :(得分:0)