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