Sistemas operativos
La concurrencia ocurre cuando varios procesos o hilos se ejecutan al mismo tiempo (o parecen hacerlo) y comparten recursos. 👉 El reto: coordinar su ejecución para evitar errores.
🔹 Problemas comunes de concurrencia
-
Condiciones de carrera (race conditions)
- Se producen cuando dos o más procesos acceden y modifican un recurso compartido al mismo tiempo, y el resultado depende del orden de ejecución.
- Ejemplo: dos cajeros actualizando el saldo de la misma cuenta bancaria.
-
Secciones críticas
- Son fragmentos de código donde un proceso accede a un recurso compartido.
- Si dos procesos entran a la vez en su sección crítica → error.
-
Interbloqueo (deadlock)
- Dos o más procesos quedan bloqueados esperando recursos que nunca se liberan.
- Ejemplo: el proceso A tiene el recurso X y espera el recurso Y, mientras que el proceso B tiene el recurso Y y espera el recurso X.
-
Inanición (starvation)
- Un proceso nunca obtiene CPU o recursos porque otros de mayor prioridad siempre se adelantan.
-
Bloqueo activo (busy waiting)
- Un proceso espera ocupando CPU en lugar de quedar en pausa, desperdiciando recursos.
🔹 Mecanismos de sincronización
-
Bloqueos (locks / mutexes)
- Permiten que solo un proceso o hilo acceda a un recurso a la vez.
-
Semáforos
- Contadores que regulan el acceso a recursos con capacidad limitada.
- Ejemplo: un semáforo en una base de datos permite que solo 5 usuarios abran conexiones simultáneas.
-
Monitores
- Abstracción de más alto nivel que combina bloqueo + variables de condición.
- Muy usados en lenguajes de programación modernos (Java, C#).
-
Variables de condición
- Permiten que un proceso espere hasta que otro libere un recurso.
🔹 Ejemplo práctico
-
Banco con cuentas compartidas:
- Dos cajeros intentan actualizar la misma cuenta al mismo tiempo.
- Si no hay control, el saldo puede quedar mal calculado (condición de carrera).
- Solución: usar un mutex para que solo un cajero pueda modificar la cuenta a la vez.
📌 Resumen rápido
- Concurrencia = varios procesos/hilos compartiendo recursos.
- Problemas: condiciones de carrera, secciones críticas, deadlocks, inanición, busy waiting.
- Soluciones: locks, semáforos, monitores, variables de condición.
- Loading...