# Queue (Class)

In: | thread.rb
Parent: | Object

This class provides a way to communicate data between threads.

TODO: an example (code or English) would really help here. How do you set up a queue between two threads?

## Methods

<< clear deq empty? enq length new num_waiting pop push shift size

## Public Class methods

new()

Creates a new queue.

[Source]

    # File thread.rb, line 239
      def initialize
        @que = []
        @waiting = []
        @que.taint          # enable tainted comunication

        @waiting.taint
        self.taint
      end

## Public Instance methods

push(obj)

Pushes `obj` to the queue.

[Source]

    # File thread.rb, line 250
      def push(obj)
        Thread.critical = true
        @que.push obj
        begin
          t = @waiting.shift
          t.wakeup if t
        rescue ThreadError
          retry
        ensure
          Thread.critical = false
        end
        begin
          t.run if t
        rescue ThreadError
        end
      end

<<(obj)

Alias for push

enq(obj)

Alias for push

pop(non_block=false)

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.

[Source]

    # File thread.rb, line 274
      def pop(non_block=false)
        while (Thread.critical = true; @que.empty?)
          raise ThreadError, "queue empty" if non_block
          @waiting.push Thread.current
          Thread.stop
        end
        @que.shift
      ensure
        Thread.critical = false
      end

shift(non_block=false)

Alias for pop

deq(non_block=false)

Alias for pop

empty?()

Returns `true` is the queue is empty.

[Source]

    # File thread.rb, line 290
      def empty?
        @que.empty?
      end

clear()

Removes all objects from the queue.

[Source]

    # File thread.rb, line 297
      def clear
        @que.clear
      end

length()

Returns the length of the queue.

[Source]

    # File thread.rb, line 304
      def length
        @que.length
      end

size()

Alias of length.

[Source]

    # File thread.rb, line 311
      def size
        length
      end

num_waiting()

Returns the number of threads waiting on the queue.

[Source]

    # File thread.rb, line 318
      def num_waiting
        @waiting.size
      end

[Validate]