Class: TimedQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/connection_pool/timed_queue.rb

Instance Method Summary collapse

Constructor Details

#initializeTimedQueue

Returns a new instance of TimedQueue.



5
6
7
8
9
# File 'lib/connection_pool/timed_queue.rb', line 5

def initialize
  @que = []
  @mutex = Mutex.new
  @resource = ConditionVariable.new
end

Instance Method Details

#clearObject



34
35
36
# File 'lib/connection_pool/timed_queue.rb', line 34

def clear
  @que.clear
end

#empty?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/connection_pool/timed_queue.rb', line 30

def empty?
  @que.empty?
end

#lengthObject



38
39
40
# File 'lib/connection_pool/timed_queue.rb', line 38

def length
  @que.length
end

#push(obj) ⇒ Object Also known as: <<



11
12
13
14
15
16
# File 'lib/connection_pool/timed_queue.rb', line 11

def push(obj)
  @mutex.synchronize do
    @que.push obj
    @resource.broadcast
  end
end

#timed_pop(timeout = 0.5) ⇒ Object



19
20
21
22
23
24
25
26
27
28
# File 'lib/connection_pool/timed_queue.rb', line 19

def timed_pop(timeout=0.5)
  deadline = Time.now + timeout
  @mutex.synchronize do
    loop do
      return @que.shift unless @que.empty?
      raise Timeout::Error if Time.now > deadline
      @resource.wait(@mutex, timeout)
    end
  end
end