Class: SauceTunnel::SimpleQueue
- Inherits:
-
Object
- Object
- SauceTunnel::SimpleQueue
- Defined in:
- lib/sauce_tunnel/simple_queue.rb
Overview
A really basic message queue, which unlike the queue in stdlib makes it possible to specify a timeout for ‘pop`.
Instance Method Summary collapse
-
#initialize ⇒ SimpleQueue
constructor
A new instance of SimpleQueue.
- #pop(timeout = nil) ⇒ Object
- #push(value) ⇒ Object
Constructor Details
#initialize ⇒ SimpleQueue
Returns a new instance of SimpleQueue.
5 6 7 8 9 |
# File 'lib/sauce_tunnel/simple_queue.rb', line 5 def initialize @mutex = Mutex.new @queue = [] @received = ConditionVariable.new end |
Instance Method Details
#pop(timeout = nil) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/sauce_tunnel/simple_queue.rb', line 18 def pop(timeout = nil) @mutex.synchronize do start_time = Time.now loop do if @queue.empty? elapsed_time = Time.now - start_time raise ThreadError, "queue empty" if elapsed_time >= timeout @received.wait(@mutex, timeout - elapsed_time) else break end end @queue.shift end end |
#push(value) ⇒ Object
11 12 13 14 15 16 |
# File 'lib/sauce_tunnel/simple_queue.rb', line 11 def push(value) @mutex.synchronize do @queue << value @received.signal end end |