# async.mutex (Compartido)

> Ejecuta una función en un hilo async nuevo, como `async.thread`, pero no empieza mientras otro hilo iniciado desde la misma línea del código, con la misma `key`, siga en marcha.

- **Plataforma**: MY Multiplayer (MYMP)
- **Tipo**: Función Lua
- **Lado**: Compartido
- **Categoría**: Temporizadores y asíncrono
- **URL**: https://wiki.mymp.gg/es/async.mutex

## Sintaxis

```lua
any async.mutex(function func [, any key = nil])
```

## Parámetros

| Nombre | Tipo | Descripción |
| --- | --- | --- |
| `func` | `function` | Función que ejecuta el hilo. |
| `key` | `any` | Valor que separa los bloqueos de la misma línea, como un jugador. Se convierte en texto como hace `tostring`. *(por defecto: `nil`)* |

## Retorno

El hilo, o `false` si un hilo de la misma línea y la misma `key` aún no terminó.

## Ejemplo

```lua
addCommandHandler("save", function(player)
    local started = async.mutex(function()
        async.wait(2000)
        outputDebugString(getPlayerName(player) .. " guardó")
    end, player)

    if not started then
        outputDebugString(getPlayerName(player) .. " ya está guardando")
    end
end)
```

## Ver también

- [async.thread (Compartido)](https://wiki.mymp.gg/es/async.thread.md): Ejecuta una función en un hilo async nuevo, en el acto. La llamada vuelve cuando la función termina o hace su primera pausa, como con async.wait.
- [async.status (Compartido)](https://wiki.mymp.gg/es/async.status.md): Indica en qué estado está un hilo async de este recurso.
