Files
OliveTin/frontend/js/Mutex.js
2025-08-03 22:10:51 +01:00

25 lines
474 B
JavaScript

export class Mutex {
constructor() {
this._locked = false;
this._waiting = [];
}
lock() {
const unlock = () => {
const next = this._waiting.shift();
if (next) {
next(unlock);
} else {
this._locked = false;
}
};
if (this._locked) {
return new Promise(resolve => this._waiting.push(resolve)).then(() => unlock);
} else {
this._locked = true;
return Promise.resolve(unlock);
}
}
}