Sobes.tech
Junior — Middle

¿Cuál es la diferencia entre un bloqueo normal y un bloqueo recursivo en la sincronización de hilos?

sobes.tech AI

Respuesta de la IA

El bloqueo normal (mutex) permite que un hilo adquiera un recurso, y si ese mismo hilo intenta adquirir el mismo bloqueo nuevamente, será bloqueado, lo que conducirá a un bloqueo mutuo (deadlock).

El bloqueo recursivo (recursive mutex) se diferencia en que el mismo hilo puede adquirirlo varias veces consecutivas sin bloquearse. Sin embargo, el bloqueo debe ser liberado tantas veces como fue adquirido, para que otros hilos puedan acceder.

Ejemplo:

  • Bloqueo normal:

    • El hilo A adquiere el bloqueo.
    • El hilo A intenta adquirirlo de nuevo — se bloquea para siempre.
  • Bloqueo recursivo:

    • El hilo A adquiere el bloqueo.
    • El hilo A lo vuelve a adquirir — con éxito.
    • El hilo A libera el bloqueo dos veces, después de lo cual está disponible para otros hilos.

Los bloqueos recursivos son útiles cuando una función que adquiere un bloqueo puede ser llamada recursivamente o desde diferentes niveles de anidamiento en un mismo hilo.