/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Licensed under the Apache License, Version 2.0. See LICENSE file in the project root for details. ***************************************************************************** */ import { CancellationToken } from "./cancellation"; import { Cancelable } from "@esfx/cancelable"; import { Disposable } from "@esfx/disposable"; /** * Coordinates readers and writers for a resource. */ export declare class ReaderWriterLock { private _readers; private _upgradeables; private _upgrades; private _writers; private _upgradeable; private _upgraded; private _count; /** * Asynchronously waits for and takes a read lock on a resource. * * @param token A CancellationToken used to cancel the request. */ read(token?: CancellationToken | Cancelable): Promise; /** * Asynchronously waits for and takes a read lock on a resource * that can later be upgraded to a write lock. * * @param token A CancellationToken used to cancel the request. */ upgradeableRead(token?: CancellationToken | Cancelable): Promise; /** * Asynchronously waits for and takes a write lock on a resource. * * @param token A CancellationToken used to cancel the request. */ write(token?: CancellationToken | Cancelable): Promise; private _upgrade; private _processLockRequests; private _canTakeReadLock; private _processReadLockRequests; private _takeReadLock; private _releaseReadLock; private _canTakeUpgradeableReadLock; private _processUpgradeableReadLockRequest; private _takeUpgradeableReadLock; private _releaseUpgradeableReadLock; private _canTakeUpgradeLock; private _processUpgradeRequest; private _takeUpgradeLock; private _releaseUpgradeLock; private _canTakeWriteLock; private _processWriteLockRequest; private _takeWriteLock; private _releaseWriteLock; } /** * An object used to release a held lock. */ export interface LockHandle extends Disposable { /** * Releases the lock. */ release(): void; } /** * An object used to release a held lock or upgrade to a write lock. */ export interface UpgradeableLockHandle extends LockHandle, Disposable { /** * Upgrades the lock to a write lock. * * @param token A CancellationToken used to cancel the request. */ upgrade(token?: CancellationToken | Cancelable): Promise; }