code: func (s *Dynamic) Release() {
  	s.mu.Lock()
  	defer s.mu.Unlock()
  
  	if s.cur < 1 {
  		panic("semaphore: bad release")
  	}
  
  	next := s.waiters.Front()
  
  	// If there are no waiters, just decrement and we're done
  	if next == nil {
  		s.cur--
  		return
  	}
  
  	// Need to yield our slot to the next waiter.
  	// Remove them from the list
  	s.waiters.Remove(next)
  	// And trigger it's chan before we release the lock
  	close(next.Value.(chan struct{}))
  	// Note we _don't_ decrement inflight since the slot was yielded directly.
  }
docs: // Release releases the semaphore. It will panic if release is called on an
  // empty semphore.