UNPKG

2.69 kBTypeScriptView Raw
1/*! *****************************************************************************
2Copyright (c) Microsoft Corporation.
3Licensed under the Apache License, Version 2.0.
4
5See LICENSE file in the project root for details.
6***************************************************************************** */
7import { CancellationToken } from "./cancellation";
8import { Cancelable } from "@esfx/cancelable";
9import { Disposable } from "@esfx/disposable";
10/**
11 * Coordinates readers and writers for a resource.
12 */
13export declare class ReaderWriterLock {
14 private _readers;
15 private _upgradeables;
16 private _upgrades;
17 private _writers;
18 private _upgradeable;
19 private _upgraded;
20 private _count;
21 /**
22 * Asynchronously waits for and takes a read lock on a resource.
23 *
24 * @param token A CancellationToken used to cancel the request.
25 */
26 read(token?: CancellationToken | Cancelable): Promise<LockHandle>;
27 /**
28 * Asynchronously waits for and takes a read lock on a resource
29 * that can later be upgraded to a write lock.
30 *
31 * @param token A CancellationToken used to cancel the request.
32 */
33 upgradeableRead(token?: CancellationToken | Cancelable): Promise<UpgradeableLockHandle>;
34 /**
35 * Asynchronously waits for and takes a write lock on a resource.
36 *
37 * @param token A CancellationToken used to cancel the request.
38 */
39 write(token?: CancellationToken | Cancelable): Promise<LockHandle>;
40 private _upgrade;
41 private _processLockRequests;
42 private _canTakeReadLock;
43 private _processReadLockRequests;
44 private _takeReadLock;
45 private _releaseReadLock;
46 private _canTakeUpgradeableReadLock;
47 private _processUpgradeableReadLockRequest;
48 private _takeUpgradeableReadLock;
49 private _releaseUpgradeableReadLock;
50 private _canTakeUpgradeLock;
51 private _processUpgradeRequest;
52 private _takeUpgradeLock;
53 private _releaseUpgradeLock;
54 private _canTakeWriteLock;
55 private _processWriteLockRequest;
56 private _takeWriteLock;
57 private _releaseWriteLock;
58}
59/**
60 * An object used to release a held lock.
61 */
62export interface LockHandle extends Disposable {
63 /**
64 * Releases the lock.
65 */
66 release(): void;
67}
68/**
69 * An object used to release a held lock or upgrade to a write lock.
70 */
71export interface UpgradeableLockHandle extends LockHandle, Disposable {
72 /**
73 * Upgrades the lock to a write lock.
74 *
75 * @param token A CancellationToken used to cancel the request.
76 */
77 upgrade(token?: CancellationToken | Cancelable): Promise<LockHandle>;
78}