API reference@evolu/commonTask › createMutex

function createMutex(): Mutex;

Defined in: packages/common/src/Task.ts:5927

Creates a Mutex.

Example

import {
  assertEqual,
  assertOk,
  createMutex,
  createRun,
  ok,
  sleep,
  type Task,
} from "@evolu/common";

const mutex = createMutex();
let balance = 0;
const deposit = (amount: number): Task<void> =>
  mutex.withLock(async (run) => {
    const currentBalance = balance;
    await run.ok(sleep("1ms"));
    balance = currentBalance + amount;
    return ok();
  });

await using run = createRun();
const [first, second] = await Promise.all([run(deposit(2)), run(deposit(3))]);
assertOk(first, undefined);
assertOk(second, undefined);
assertEqual(balance, 5);