Lección 12: data races, deadlock y atómicos
Esta lección profundiza en tres amenazas difíciles de depurar: el data race (definición precisa en C++), el deadlock (dos hilos que se esperan mutuamente), y las operaciones atómicas (std::atomic) como alternativa ligera al mutex para contadores simples.
data race = dos personas escribiendo en el mismo papel al mismo tiempo. deadlock = dos personas que tienen lo que la otra necesita y se esperan mutuamente. atomic = una operación completa — no se puede interrumpir a la mitad.
- data race
- Según el estándar de C++: dos hilos acceden a la misma ubicación de memoria, al menos uno escribe, y no hay sincronización entre ellos. Causa comportamiento indefinido (undefined behavior).
- comportamiento indefinido (UB)
- Una situación en la que el estándar de C++ no define qué pasa — el compilador puede generar cualquier código, incluyendo caídas, valores incorrectos, o incluso funcionar correctamente a veces.
- deadlock
- Un estado en el que dos o más hilos se esperan mutuamente para que el otro libere un mutex, y ninguno puede avanzar jamás.
- atómico
- Una operación que se ejecuta como una unidad indivisible. std::atomic<T> en C++ garantiza que una operación de lectura-modificación-escritura no sea interrumpida por otro hilo.
- compare-exchange
- Una operación atómica que compara el valor actual con un valor esperado; si son iguales, lo reemplaza por un valor nuevo. Es la base de los algoritmos lock-free.