1 | /*! *****************************************************************************
|
2 | Copyright (c) Microsoft Corporation.
|
3 | Licensed under the Apache License, Version 2.0.
|
4 |
|
5 | See LICENSE file in the project root for details.
|
6 | ***************************************************************************** */
|
7 | import { CancellationToken } from "./cancellation";
|
8 | import { Cancelable } from "@esfx/cancelable";
|
9 | import { Disposable } from "@esfx/disposable";
|
10 | /**
|
11 | * Coordinates readers and writers for a resource.
|
12 | */
|
13 | export 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 | */
|
62 | export 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 | */
|
71 | export 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 | }
|