semaphore = $semaphore; } /** {@inheritdoc} */ public function acquire(): Promise { return call(function (): \Generator { /** @var \Amp\Sync\Lock $lock */ $lock = yield $this->semaphore->acquire(); if ($lock->getId() !== 0) { $lock->release(); throw new \Error("Cannot use a semaphore with more than a single lock"); } return $lock; }); } }