UNPKG

@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
"use strict"; 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;