1.0.0 • Published 6 months ago

async-monitor v1.0.0

Weekly downloads
-
License
BSD-3-Clause
Repository
github
Last release
6 months ago

async-monitor

async-monitor is a nodejs library that provides a simple way to synchronize access to shared objects in asynchronous code blocks.

It is inspired by the Monitor class in .NET, which allows multiple threads to acquire and release exclusive locks on resources.

Since async-monitor uses AsyncLocalStorage and Symbol.dispose internally, it can only be used in nodejs 20+ environments.

usage

import { enter } from "async-monitor";

async function delay(timeout: number) {
  await new Promise<void>((resolve) => {
    setTimeout(resolve, timeout);
  });
}

let foo = 0;

void (async () => {
  while (true) {
    await enter(233, async (section) => {
      console.log("while 1");

      section.pulseAll();
      await section.wait();

      const value = foo;
      await delay(500);

      foo = value + 1;

      console.log(`while 1: ${foo}`);
    });
  }
})();

void (async () => {
  while (true) {
    await enter(233, async (section) => {
      console.log("while 2");

      section.pulseAll();
      await section.wait();

      const value = foo;
      await delay(500);

      console.log("to reenter");
      await enter(233, () => {
        console.log("reenter");
      });

      foo = value + 1;

      console.log(`while 2: ${foo}`);
    });
  }
})();
1.0.0

6 months ago