def reserve_pins(self, requester, *pins):
        """
        Called to indicate that the device reserves the right to use the
        specified *pins*. This should be done during device construction.  If
        pins are reserved, you must ensure that the reservation is released by
        eventually called :meth:`release_pins`.
        """
        with self._res_lock:
            for pin in pins:
                for reserver_ref in self._reservations[pin]:
                    reserver = reserver_ref()
                    if reserver is not None and requester._conflicts_with(reserver):
                        raise GPIOPinInUse('pin %s is already in use by %r' %
                                           (pin, reserver))
                self._reservations[pin].append(ref(requester))