code: func (l *Lock) Lock() (err error) {
  	return l.store(func(sem *Semaphore) error {
  		return sem.Lock(l.id)
  	})
  }
docs: // Lock adds this lock id as a holder to the semaphore
  // it will return an error if there is a problem getting or setting the
  // semaphore, or if the maximum number of holders has been reached, or if a lock
  // with this id is already a holder