Maintenance of Ruby 2.0.0 ended on February 24, 2016. Read more
Object
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
Removes all objects from the queue.
# File thread.rb, line 229
def clear
@que.clear
end
Returns true if the queue is empty.
# File thread.rb, line 222
def empty?
@que.empty?
end
Returns the length of the queue.
# File thread.rb, line 236
def length
@que.length
end
Returns the number of threads waiting on the queue.
# File thread.rb, line 248
def num_waiting
@num_waiting
end
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 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