SizedQueue (Class)

In: thread.rb
Parent: Queue

This class represents queues of specified size capacity. The push operation may be blocked if the capacity is full.

Methods

<<   deq   enq   max   max=   new   num_waiting   pop   push   shift  

Public Class methods

Creates a fixed-length queue with a maximum size of max.

[Source]

# File thread.rb, line 331
  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

Public Instance methods

<<(obj)

Alias for push

deq(*args)

Alias for pop

enq(obj)

Alias for push

Returns the maximum size of the queue.

[Source]

# File thread.rb, line 342
  def max
    @max
  end

Sets the maximum size of the queue.

[Source]

# File thread.rb, line 349
  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

[Source]

# File thread.rb, line 404
  def num_waiting
    @waiting.size + @queue_wait.size
  end

[Source]

# File thread.rb, line 382
  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

[Source]

# File thread.rb, line 370
  def push(obj)
    Thread.critical = true
    while @que.length >= @max
      @queue_wait.push Thread.current
      Thread.stop
      Thread.critical = true
    end
    super
  end
shift(*args)

Alias for pop

[Validate]