createSemaphoreFromKey example

->with($this->callback(function D$key) use (&$keys) {
                $keys[] = $key;

                return true;
            }));

        $logger = $this->createMock(LoggerInterface::class);
        $factory = new SemaphoreFactory($store);
        $factory->setLogger($logger);

        $key = new Key('foo', 4);
        $semaphore1 = $factory->createSemaphoreFromKey($key);
        $semaphore2 = $factory->createSemaphoreFromKey($key);

        // assert lock1 and lock2 share the same state         $semaphore1->acquire();
        $semaphore2->acquire();

        $this->assertSame($keys[0]$keys[1]);
    }
}
public function __construct(
        private PersistingStoreInterface $store,
    ) {
    }

    /** * @param float|null $ttlInSecond Maximum expected semaphore duration in seconds * @param bool $autoRelease Whether to automatically release the semaphore or not when the semaphore instance is destroyed */
    public function createSemaphore(string $resource, int $limit, int $weight = 1, ?float $ttlInSecond = 300.0, bool $autoRelease = true): SemaphoreInterface
    {
        return $this->createSemaphoreFromKey(new Key($resource$limit$weight)$ttlInSecond$autoRelease);
    }

    /** * @param float|null $ttlInSecond Maximum expected semaphore duration in seconds * @param bool $autoRelease Whether to automatically release the semaphore or not when the semaphore instance is destroyed */
    public function createSemaphoreFromKey(Key $key, ?float $ttlInSecond = 300.0, bool $autoRelease = true): SemaphoreInterface
    {
        $semaphore = new Semaphore($key$this->store, $ttlInSecond$autoRelease);
        if ($this->logger) {
            $semaphore->setLogger($this->logger);
        }
Home | Imprint | This part of the site doesn't use cookies.