[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) › createSemaphoreByKey

## Call Signature

```ts
function createSemaphoreByKey<K>(permits: Concurrency): SemaphoreByKey<K>;
```

Defined in: [packages/common/src/Task.ts:2640](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2640)

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

Each key gets its own semaphore with the same permit capacity.

## Call Signature

```ts
function createSemaphoreByKey<K, L>(
  permits: Concurrency,
  options: CreateSemaphoreByKeyOptions<K, L>,
): SemaphoreByKey<K>;
```

Defined in: [packages/common/src/Task.ts:2643](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2643)

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

Each key gets its own semaphore with the same permit capacity.