hexo/node_modules/warehouse/lib/mutex.js

33 lines
450 B
JavaScript
Raw Normal View History

2023-10-03 11:14:36 +08:00
'use strict';
class Mutex {
constructor() {
this._locked = false;
this._queue = [];
}
lock(fn) {
if (this._locked) {
this._queue.push(fn);
return;
}
this._locked = true;
fn();
}
unlock() {
if (!this._locked) return;
const next = this._queue.shift();
if (next) {
next();
} else {
this._locked = false;
}
}
}
module.exports = Mutex;