totjs
Version:
Markup-like Database without Indexing
37 lines (35 loc) • 708 B
JavaScript
module.exports = class Mutex
{
constructor()
{
this.locked = false;
this.waitingQueue = [];
}
async acquire()
{
return new Promise((resolve) =>
{
if (!this.locked)
{
this.locked = true;
resolve();
}
else
{
this.waitingQueue.push(resolve);
}
});
}
async release()
{
if (this.waitingQueue.length > 0)
{
const resolve = this.waitingQueue.shift();
resolve();
}
else
{
this.locked = false;
}
}
}