[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:5881](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Task.ts#L5881)

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:5886](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Task.ts#L5886)

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:5883](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Task.ts#L5883)

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