We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Mutex
1 parent 57b1cf6 commit e324508Copy full SHA for e324508
mutex.ts
@@ -26,13 +26,13 @@
26
* ```
27
*/
28
export class Mutex {
29
- #waiters: Promise<void>[] = [];
+ #waiters: Set<Promise<void>> = new Set();
30
31
/**
32
* Returns true if the mutex is locked, false otherwise.
33
34
get locked(): boolean {
35
- return this.#waiters.length > 0;
+ return this.#waiters.size > 0;
36
}
37
38
@@ -43,10 +43,11 @@ export class Mutex {
43
acquire(): Promise<Disposable> & Disposable {
44
const waiters = [...this.#waiters];
45
const { promise, resolve } = Promise.withResolvers<void>();
46
- this.#waiters.push(promise);
+ this.#waiters.add(promise);
47
const disposable = {
48
[Symbol.dispose]: () => {
49
resolve();
50
+ this.#waiters.delete(promise);
51
},
52
};
53
return Object.assign(
0 commit comments