mutex for complex functions with asynchronous logic inside
npm ci
npm run build
npm run example
const locker = new Locker();
async function runme(i: number) {
try {
console.log(`waiting ${i}`);
await locker.lock();
console.log(`locked ${i}`);
await timeout(1000);
console.log(`working ${i}`);
await timeout(1000);
} finally {
console.log(`unlocked ${i}`);
locker.unlock();
console.log(`done ${i}`);
}
}
for (let i = 0; i < 3; i++) {
runme(i);
}
waiting 0
waiting 1
waiting 2
locked 0
working 0
unlocked 0
done 0
locked 1
working 1
unlocked 1
done 1
locked 2
working 2
unlocked 2
done 2