code: func (l *Locker) Lock(name string) {
  	l.mu.Lock()
  	if l.locks == nil {
  		l.locks = make(map[string]*lockCtr)
  	}
  
  	nameLock, exists := l.locks[name]
  	if !exists {
  		nameLock = &lockCtr{}
  		l.locks[name] = nameLock
  	}
  
  	// increment the nameLock waiters while inside the main mutex
  	// this makes sure that the lock isn't deleted if `Lock` and `Unlock` are called concurrently
  	nameLock.inc()
  	l.mu.Unlock()
  
  	// Lock the nameLock outside the main mutex so we don't block other operations
  	// once locked then we can decrement the number of waiters for this lock
  	nameLock.Lock()
  	nameLock.dec()
  }
docs: // Lock locks a mutex with the given name. If it doesn't exist, one is created