@d3vtool/mutex
Version:
This library allows you to use concept of mutex for shared in-memory resource in asynchronous environment.
34 lines (33 loc) • 924 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Mutex = void 0;
const queue_1 = require("./queue");
class Mutex {
constructor() {
this.isLocked = false;
this.queue = new queue_1.Queue();
}
async acquire() {
const lockPromise = new Promise((resolve, _) => {
const tryToAcquireLock = async () => {
if (!this.isLocked) {
this.isLocked = true;
resolve(() => this.unlock());
}
else {
this.queue.enqueue(tryToAcquireLock);
}
};
tryToAcquireLock();
});
return lockPromise;
}
async unlock() {
this.isLocked = false;
if (!this.queue.isEmpty()) {
const next = this.queue.dequeue();
await next();
}
}
}
exports.Mutex = Mutex;