From 23f7fedf618b7c23e5335074bc2b6450704296fc Mon Sep 17 00:00:00 2001 From: Erik Brinkman Date: Sun, 1 Mar 2026 10:42:47 -0500 Subject: [PATCH] switch to fifo --- src/lock.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/lock.ts b/src/lock.ts index e025d90..276bbe5 100644 --- a/src/lock.ts +++ b/src/lock.ts @@ -10,20 +10,25 @@ interface Lock { } class AsyncLock implements Lock { - #queue: (() => void)[] = []; + #queue: Record void> = {}; + #next: number = 0; + #last: number = 0; #locked: boolean = false; async acquire(): Promise { if (this.#locked) { - await new Promise((resolve) => this.#queue.push(resolve)); + await new Promise((resolve) => { + this.#queue[this.#last++] = resolve; + }); } else { this.#locked = true; } } release(): void { - const next = this.#queue.pop(); - if (next) { + if (this.#next !== this.#last) { + const next = this.#queue[this.#next]!; + delete this.#queue[this.#next++]; next(); } else { this.#locked = false;