prex-es5
Version:
Async coordination primitives and extensions on top of ES6 Promises
77 lines (75 loc) • 2.43 kB
TypeScript
/*! *****************************************************************************
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";
/**
* 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): Promise<LockHandle>;
/**
* 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): Promise<UpgradeableLockHandle>;
/**
* Asynchronously waits for and takes a write lock on a resource.
*
* @param token A CancellationToken used to cancel the request.
*/
write(token?: CancellationToken): Promise<LockHandle>;
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 {
/**
* Releases the lock.
*/
release(): void;
}
/**
* An object used to release a held lock or upgrade to a write lock.
*/
export interface UpgradeableLockHandle extends LockHandle {
/**
* Upgrades the lock to a write lock.
*
* @param token A CancellationToken used to cancel the request.
*/
upgrade(token?: CancellationToken): Promise<LockHandle>;
}