Sobes.tech
Junior — Middle

¿Puede explicar cómo se implementa la mecánica de bloqueo al usar synchronized o lock en programación multihilo?

sobes.tech AI

Respuesta de la IA

La mecánica de bloqueo al usar synchronized (en Java) o lock (en C#) se basa en el uso de primitivas de sincronización que garantizan acceso exclusivo a la sección crítica del código.

Cuando un hilo entra en un bloque protegido por lock o synchronized, intenta adquirir el bloqueo del objeto asociado a ese bloque (mutex). Si el bloqueo está libre, el hilo lo adquiere y continúa la ejecución. Si el bloqueo ya está ocupado por otro hilo, el hilo actual se bloquea (espera) hasta que el bloqueo se libere.

Ejemplo en C# con lock:

private readonly object _lockObj = new object();

void CriticalSection() {
    lock(_lockObj) {
        // código que debe ejecutarse solo por un hilo a la vez
    }
}

Dentro de lock, el compilador genera llamadas a los métodos Monitor.Enter y Monitor.Exit, que gestionan la adquisición y liberación del bloqueo.

De esta forma, la mecánica de bloqueo garantiza que solo un hilo ejecute la sección crítica a la vez, previniendo condiciones de carrera y asegurando la integridad de los datos.