This class represents queues of specified size capacity. The push operation may be blocked if the capacity is full.
See Queue for an example of how a SizedQueue works.
Creates a fixed-length queue with a maximum size of max.
# File thread.rb, line 379 def initialize(max) raise ArgumentError, "queue size must be positive" unless max > 0 @max = max @queue_wait = [] @queue_wait.taint # enable tainted comunication super() end
Sets the maximum size of the queue.
# File thread.rb, line 397 def max=(max) Thread.critical = true if max <= @max @max = max Thread.critical = false else diff = max - @max @max = max Thread.critical = false diff.times do begin t = @queue_wait.shift t.run if t rescue ThreadError retry end end end max end
Returns the number of threads waiting on the queue.
# File thread.rb, line 478 def num_waiting @waiting.size + @queue_wait.size end
Retrieves data from the queue and runs a waiting thread, if any.
# File thread.rb, line 445 def pop(*args) retval = super Thread.critical = true if @que.length < @max begin t = @queue_wait.shift t.wakeup if t rescue ThreadError retry ensure Thread.critical = false end begin t.run if t rescue ThreadError end end retval end