UNPKG

hardhat

Version:

Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.

47 lines 1.29 kB
/** * A class that implements an asynchronous mutex (mutual exclusion) lock. * * The mutex ensures that only one asynchronous operation can be executed at a time, * providing exclusive access to a shared resource. */ export class AsyncMutex { #acquired = false; #queue = []; /** * Acquires the mutex, running the provided function exclusively, * and releasing it afterwards. * * @param f The function to run. * @returns The result of the function. */ async exclusiveRun(f) { const release = await this.#acquire(); try { return await f(); } finally { await release(); } } /** * Acquires the mutex, returning a function that releases it. */ async #acquire() { if (!this.#acquired) { this.#acquired = true; return async () => { this.#acquired = false; const next = this.#queue.shift(); if (next !== undefined) { next(); } }; } return new Promise((resolve) => { this.#queue.push(() => { resolve(this.#acquire()); }); }); } } //# sourceMappingURL=async-mutex.js.map