JavaScript defínese como unha linguaxe resentida que significa que non hai fíos expostos ao usuario, pode haber subprocesos na implementación. As funcións como setTimeout()
e as devolucións de chamadas asíncronas deben esperar que o motor de script sexa suspendido antes de que poidan executarse.
Isto significa que todo o que ocorre nun evento debe ser rematado antes de que o próximo evento sexa procesado.
Dito isto, pode que necesite un mutex se o seu código fai algo onde esperas un valor para cambiar entre o momento en que desencadeou o evento asíncrono eo momento en que se chamou a devolución de chamada.
Por exemplo, se ten unha estrutura de datos en que fai clic nun botón e envíe un XMLHttPRequest que chama a unha devolución de chamada, cambia a estrutura de datos de forma destrutiva e ten outro botón que cambia a mesma estrutura de datos directamente, entre Cando o evento foi disparado e cando se executou a devolución de devolución, o usuario podería facer clic e actualizar a estrutura de datos antes da devolución de chamada, que podería perder valor.
Aínda que pode crear unha condición de carreira así, é moi fácil evitala no seu código, xa que cada función será atómica. Sería moito traballo e necesitaríanse algúns estraños patróns de codificación para crear a condición profesional de feito.