| Riesgo | Descripción |
|---|---|
| Data races | Acceso concurrente sin protección a variables compartidas |
| Condiciones de carrera | El resultado depende del orden impredecible de ejecución de los hilos |
| Deadlocks | Dos o más hilos esperan eternamente por recursos que el otro tiene |
| Livelocks | Los hilos siguen activos pero no progresan (siguen cediéndose recursos sin avanzar) |
| Inanición (starvation) | Un hilo nunca obtiene acceso al recurso porque otros siempre se adelantan |
| Inconsistencia | Estados intermedios visibles para otros hilos antes de completar una operación lógica |
| Herramienta | Para qué sirve |
|---|---|
| Mutex (mutual exclusion) | Protección exclusiva de regiones críticas |
| Semáforos | Control de acceso con contadores; sincronización más compleja |
| Condicionales (cond vars) | Para esperar y notificar cambios de estado entre hilos |
| Atomic operations | Operaciones indivisibles (como atomic_add, compare_and_swap) |
| Barriers | Sincronización grupal entre múltiples hilos |
| Volatile (C/C++) | Impide que el compilador optimice accesos (no es solución de sincronización) |
| Memory fences | Barreras de orden de memoria (útiles en programación a bajo nivel) |
Una data race ocurre cuando:
Resultado: comportamiento indefinido. Los datos pueden corromperse y los errores son difíciles de reproducir.