Cuando varios threads comparten datos, sus operaciones pueden entrelazarse (interleave) en medio de una actualización de varios pasos, produciendo una race condition — un bug donde el resultado depende de un timing impredecible. La sincronización es el conjunto de herramientas que fuerzan un orden seguro.
El problema: una race condition
parece atómico pero en realidad es read-modify-write:
