Files
wp-multisite-waas/dependencies/amphp/sync/src/SemaphoreMutex.php
2024-11-30 18:24:12 -07:00

32 lines
858 B
PHP

<?php
namespace WP_Ultimo\Dependencies\Amp\Sync;
use WP_Ultimo\Dependencies\Amp\Promise;
use function WP_Ultimo\Dependencies\Amp\call;
class SemaphoreMutex implements Mutex
{
/** @var Semaphore */
private $semaphore;
/**
* @param Semaphore $semaphore A semaphore with a single lock.
*/
public function __construct(Semaphore $semaphore)
{
$this->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;
});
}
}