totjs
Version:
Markup-like Database without Indexing
35 lines (30 loc) • 660 B
JavaScript
export class Semaphore
{
constructor(maxConcurrent)
{
this.maxConcurrent = maxConcurrent;
this.count = 0;
this.waitingQueue = [];
}
async acquire()
{
if (this.count < this.maxConcurrent)
{
this.count++;
return;
}
return new Promise((resolve) => this.waitingQueue.push(resolve));
}
async release()
{
if (this.waitingQueue.length > 0)
{
const resolve = this.waitingQueue.shift();
resolve();
}
else
{
this.count--;
}
}
};