code: func NewUnboundedSemaphore(initialCount int) Semaphore {
  	res := &unboundedSemaphore{
  		counter: int64(initialCount),
  	}
  	res.cond.L = &res.lock
  	return res
  }
docs: // This returns an unbound counting semaphore with the specified initial count.
  // The semaphore counter can be arbitrary large (i.e., Release can be called
  // unlimited amount of times).
  //
  // NOTE: In general, users should use bounded semaphore since it is more
  // efficient than unbounded semaphore.