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

Defined in: [packages/common/src/Task.ts:5876](https://github.com/evoluhq/evolu/blob/dd96d79f1dbe9a49fa12ce8e0aa7d3d0177795ca/packages/common/src/Task.ts#L5876)

Runs [Task](https://evolu.dev/docs/api-reference/common/Task/type-aliases/Task)s one at a time.

`Mutex` is non-reentrant. A Task that tries to acquire the same Mutex while
already holding it waits on itself and will not progress.

## Properties

<a id="snapshot"></a>

### snapshot

```ts
readonly snapshot: () => SemaphoreSnapshot;
```

Defined in: [packages/common/src/Task.ts:5881](https://github.com/evoluhq/evolu/blob/dd96d79f1dbe9a49fa12ce8e0aa7d3d0177795ca/packages/common/src/Task.ts#L5881)

Returns the current lock state for monitoring and debugging.

### withLock

```ts
readonly withLock: <T, E, D>(task: Task<T, E, D>) => Task<T, E, D>;
```

Defined in: [packages/common/src/Task.ts:5878](https://github.com/evoluhq/evolu/blob/dd96d79f1dbe9a49fa12ce8e0aa7d3d0177795ca/packages/common/src/Task.ts#L5878)

Runs a [Task](https://evolu.dev/docs/api-reference/common/Task/type-aliases/Task) while holding the lock.