This commit is contained in:
Nikita Sivukhin
2025-09-17 10:38:05 +04:00
parent 1185298670
commit 66de28d84b
30 changed files with 4175 additions and 190 deletions

View File

@@ -0,0 +1,29 @@
export class AsyncLock {
locked: boolean;
queue: any[];
constructor() {
this.locked = false;
this.queue = []
}
async acquire() {
if (!this.locked) {
this.locked = true;
return Promise.resolve();
} else {
const block = new Promise(resolve => { this.queue.push(resolve) });
return block;
}
}
release() {
if (this.locked == false) {
throw new Error("invalid state: lock was already unlocked");
}
const item = this.queue.shift();
if (item != null) {
this.locked = true;
item();
} else {
this.locked = false;
}
}
}