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.
Returns the maximum size of the queue.
# File thread.rb, line 385 def max @max end
Sets the maximum size of the queue.
# File thread.rb, line 392 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 473 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 440 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
Pushes obj
to the queue. If there is no space left in the
queue, waits until space becomes available.
# File thread.rb, line 417 def push(obj) Thread.critical = true while @que.length >= @max @queue_wait.push Thread.current Thread.stop Thread.critical = true end super end