class Concurrent::WaitableList

def delete(value)

def delete(value)
  @mutex.synchronize { @list.delete(value) }
end

def empty?

def empty?
  @mutex.synchronize { @list.empty? }
end

def initialize

def initialize
  @mutex = Mutex.new
  @condition = Condition.new
  @list = []
end

def put(value)

def put(value)
  @mutex.synchronize do
    @list << value
    @condition.signal
  end
end

def size

def size
  @mutex.synchronize { @list.size }
end

def take

def take
  @mutex.synchronize do
    @condition.wait(@mutex) while @list.empty?
    @list.shift
  end
end