This class provides a way to synchronize communication between threads.
Example:
require 'thread'
queue = Queue.new
producer = Thread.new do
5.times do |i|
sleep rand(i) # simulate expense
queue << i
puts "#{i} produced"
end
end
consumer = Thread.new do
5.times do |i|
value = queue.pop
sleep rand(i/2) # simulate expense
puts "consumed #{value}"
end
end
consumer.join
Methods
Class Public methods
new()
Link
Creates a new queue.
Instance Public methods
clear()
Link
Removes all objects from the queue.
empty?()
Link
Returns true
if the queue is empty.
num_waiting()
Link
Returns the number of threads waiting on the queue.
pop(non_block=false)
Link
Retrieves data from the queue. If the queue is empty, the calling thread
is suspended until data is pushed onto the queue. If
non_block
is true, the thread isn't suspended, and an
exception is raised.
# File lib/thread.rb, line 186 def pop(non_block=false) Thread.handle_interrupt(StandardError => :on_blocking) do @mutex.synchronize do while true if @que.empty? if non_block raise ThreadError, "queue empty" else begin @num_waiting += 1 @cond.wait @mutex ensure @num_waiting -= 1 end end else return @que.shift end end end end end
push(obj)
Link
Pushes obj
to the queue.