def wait(timeout = nil)
      @mutex.synchronize do
        remaining    = Condition::Result.new(timeout)
        while @count > 0 && remaining.can_wait?
          remaining  = @condition.wait(@mutex, remaining.remaining_time)
        end
        @count == 0
      end
    end
def wait(timeout = nil)
      @mutex.synchronize do
        remaining    = Condition::Result.new(timeout)
        while @count > 0 && remaining.can_wait?
          remaining  = @condition.wait(@mutex, remaining.remaining_time)
        end
        @count == 0
      end
    end
Create a new `CountDownLatch` with the initial `count`.

 @param [Fixnum] count
   The initial count

 @raise [ArgumentError]
   If `count` is not an integer or is less than zero.

 Block on the latch until the counter reaches zero or until `timeout` is
 reached.

 @param [Fixnum] timeout
   The number of seconds to wait for the counter or `nil` to block
   indefinitely.
 @return [Boolean]
   True if the count reaches zero else false on timeout.