import { IDataHook, Field } from "model-react"; export declare class Semaphore { protected maxConcurrency: number; protected queue: Array<(lease: [number, () => void]) => void>; protected currentReleaser: (() => void) | undefined; protected value: Field; /** * Creates a new semaphore * @param maxConcurrency The maximum concurrency */ constructor(maxConcurrency: number); /** * Acquires the semaphore * @returns The number of claims remaining and a function that can be used to release the resource */ acquire(): Promise<[number, () => void]>; /** * Runs the given function and makes sure to acquire and release the semaphore * @param callback The callback to run * @returns The result of the callback */ runExclusive(callback: (value: number) => Promise | T): Promise; /** * Checks whether the semaphore is locked * @param hook A hook to subscribe to changes * @returns Whether the semaphore is locked */ isLocked(hook?: IDataHook): boolean; /** * Releases the semaphore if locked. * Only available on semaphores with concurrency = 1. */ release(): void; /** * Dispatches an update in order to continue with the next consumer if present */ protected _dispatch(): void; } //# sourceMappingURL=Semaphore.d.ts.map