¿Con qué cosas hay que tener cuidado para evitar fallos de sincronización?

✔️ Principales peligros:

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

Herramientas para evitar estos problemas (sincronizacion)

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)

Buenas prácticas:

¿Qué es una data race?

Una data race ocurre cuando:

  1. Dos o más hilos acceden a la misma ubicación de memoria.
  2. Al menos uno de los accesos es de escritura.
  3. No hay sincronización entre los accesos.

Resultado: comportamiento indefinido. Los datos pueden corromperse y los errores son difíciles de reproducir.

¿Que son los mutex y donde se alojan dentro de la TCB?