[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Task](https://evolu.dev/docs/api-reference/common/Task) › createSemaphore

```ts
function createSemaphore(
  initialPermits: Int1To100OrPositiveInt,
  __namedParameters?: {
    policy?: SemaphorePolicy;
  },
): Semaphore;
```

Defined in: [packages/common/src/Task.ts:5732](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Task.ts#L5732)

Creates a [Semaphore](https://evolu.dev/docs/api-reference/common/Task/interfaces/Semaphore).

### Example

```ts
import {
  assertEqual,
  createRun,
  createSemaphore,
  getOk,
  ok,
  sleep,
  type Task,
} from "@evolu/common";

await using run = createRun();

const semaphore = createSemaphore(2);
let activeSaves = 0;
let maxActiveSaves = 0;

const saveUser =
  (id: string): Task<string> =>
  async (run) => {
    activeSaves += 1;
    maxActiveSaves = Math.max(maxActiveSaves, activeSaves);
    await run.ok(sleep("10ms"));
    activeSaves -= 1;
    return ok(`saved:${id}`);
  };

const results = await Promise.all([
  run(semaphore.withPermit(saveUser("1"))),
  run(semaphore.withPermit(saveUser("2"))),
  run(semaphore.withPermit(saveUser("3"))),
]);

const savedUsers = results.map(getOk);
assertEqual(savedUsers, ["saved:1", "saved:2", "saved:3"]);
assertEqual(maxActiveSaves, 2);
```