export interface ILock { release(): void; } export declare class Lock implements ILock { private _promise?; private _resolve?; tryTake(): boolean; take(): Promise; get isTaken(): boolean; release(): void; released(): Promise | undefined; } export declare class MultiLock implements ILock { readonly locks: Lock[]; constructor(locks: Lock[]); release(): void; } export declare function tests(): { "taking a lock twice returns false": (assert: any) => void; "can take a released lock again": (assert: any) => void; "2 waiting for lock, only first one gets it": (assert: any) => Promise; "await non-taken lock": (assert: any) => Promise; };