estigui habilitat es defineix com un llenguatge reentrant el que significa que no hi ha subprocessos exposats a l’usuari, pot haver subprocessos en la implementació. Les funcions com setTimeout()
i les devolucions de trucada asíncrones necessiten esperar que el motor de seqüència de comandaments es suspengui abans que puguin executar-se.
Això vol dir que tot el que succeeix en un esdeveniment ha d’acabar abans que es processi el proper esdeveniment.
Dit això, és possible que necessiti un mutex si el seu codi fa alguna cosa on s’espera que un valor no canviï entre el moment en què es va disparar l’esdeveniment asincrònic i el moment en què es va cridar a la devolució de trucada .
Per exemple, si té una estructura de dades en la qual fa clic a un botó i envia un XmlHttpRequest que crida a una devolució de trucada, canvia l’estructura de dades d’una manera destructiva, i té un altre botó que canvia la mateixa estructura de dades directament, entre quan l’esdeveniment es va disparar i quan es va executar la devolució de trucada, l’usuari va poder haver fet clic i actualitzat l’estructura de dades abans de la devolució de trucada, el que podria perdre el valor .
Si bé pot crear una condició de carrera com aquesta, és molt fàcil evitar-ho en el seu codi, ja que cada funció serà atòmica. Seria molta feina i es necessitarien alguns patrons de codificació estranys per crear la condició de carrera de fet.