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

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

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

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

Returns true is the queue is empty.

[Source]

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

Removes all objects from the queue.

[Source]

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

Returns the length of the queue.

[Source]

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

Alias of length.

[Source]

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

Returns the number of threads waiting on the queue.

[Source]

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

[Validate]