Files
2026-02-26 21:09:55 +00:00

25 lines
467 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)
}
}
}