Class: Queue
Relationships & Source Files | |
Inherits: | Object |
Defined in: | ext/thread/thread.c, ext/thread/thread.c |
Overview
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
Class Method Summary
-
.new
constructor
Creates a new queue instance.
Instance Attribute Summary
-
#empty? ⇒ Boolean
readonly
Returns
true
if the queue is empty.
Instance Method Summary
-
#<<(object)
(also: #push, #enq)
Pushes the given
object
to the queue. -
#clear
Removes all objects from the queue.
-
#deq(non_block = false)
(also: #pop, #shift)
Retrieves data from the queue.
-
#enq(object)
Alias for #<<.
-
#length
(also: #size)
Returns the length of the queue.
-
#num_waiting
Returns the number of threads waiting on the queue.
-
#pop(non_block = false)
Alias for #deq.
-
#push(object)
Alias for #<<.
-
#shift(non_block = false)
Alias for #deq.
-
#size
Alias for #length.
Constructor Details
.new
Creates a new queue instance.
Instance Attribute Details
#empty? ⇒ Boolean
(readonly)
Returns true
if the queue is empty.
Instance Method Details
#push(object)
#enq(object)
#<<(object)
Also known as: #push, #enq
Pushes the given object
to the queue.
#clear
Removes all objects from the queue.
#pop(non_block = false)
#deq(non_block = false)
#shift(non_block = false)
Also known as: #pop, #shift
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.
#push(object)
#enq(object)
#<<(object)
Alias for #<<.
#length
#size
Also known as: #size
Returns the length of the queue.
#num_waiting
Returns the number of threads waiting on the queue.
#pop(non_block = false)
#deq(non_block = false)
#shift(non_block = false)
Alias for #deq.
#push(object)
#enq(object)
#<<(object)
Alias for #<<.
#pop(non_block = false)
#deq(non_block = false)
#shift(non_block = false)
Alias for #deq.
#length
#size
Alias for #length.