class ConcurrentQueue::Listener
Public Class Methods
new()
click to toggle source
# File lib/concurrent_queue/listener.rb, line 4 def initialize @condition_variable = ConditionVariable.new @mutex = Mutex.new @popped = false @item = nil end
Public Instance Methods
add_queue(queue)
click to toggle source
# File lib/concurrent_queue/listener.rb, line 24 def add_queue(queue) raise unless queue.is_a?(ConcurrentQueue) @queues << queue nil end
pop(queues)
click to toggle source
# File lib/concurrent_queue/listener.rb, line 30 def pop(queues) queues.each { |queue| queue.add_listener(self) } @mutex.synchronize do @condition_variable.wait(@mutex) unless @popped end queues.each { |queue| queue.remove_listener(self) } @item end
send(item)
click to toggle source
# File lib/concurrent_queue/listener.rb, line 11 def send(item) @mutex.synchronize do if @popped return false else @item = item @popped = true @condition_variable.signal return true end end end