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; }); } }