Initial Commit

This commit is contained in:
David Stone
2024-11-30 18:24:12 -07:00
commit e8f7955c1c
5432 changed files with 1397750 additions and 0 deletions

View File

@ -0,0 +1,31 @@
<?php
namespace WP_Ultimo\Dependencies\Amp\Sync;
use WP_Ultimo\Dependencies\Amp\Promise;
use function WP_Ultimo\Dependencies\Amp\call;
final class LocalKeyedMutex implements KeyedMutex
{
/** @var LocalMutex[] */
private $mutex = [];
/** @var int[] */
private $locks = [];
public function acquire(string $key) : Promise
{
if (!isset($this->mutex[$key])) {
$this->mutex[$key] = new LocalMutex();
$this->locks[$key] = 0;
}
return call(function () use($key) {
$this->locks[$key]++;
/** @var Lock $lock */
$lock = (yield $this->mutex[$key]->acquire());
return new Lock(0, function () use($lock, $key) {
if (--$this->locks[$key] === 0) {
unset($this->mutex[$key], $this->locks[$key]);
}
$lock->release();
});
});
}
}