Javascript est défini comme un réentrant langue qui signifie qu'il n'est pas de filetage exposés à l'utilisateur, il peut y avoir des fils dans la mise en œuvre. Des fonctions comme setTimeout()
et rappels asynchrones besoin d'attendre pour le moteur de script pour le sommeil avant qu'ils ne soient en mesure d'exécuter.
Cela signifie que tout ce qui se passe dans un événement doit être terminé avant le prochain événement sera traité.
Cela étant dit, vous pourriez avoir besoin d'un mutex si votre code ne quelque chose où il attend une valeur à ne pas changer entre le moment où l'événement asynchrone a été congédié, et lorsque la fonction de rappel est appelée.
Par exemple, si vous avez une structure de données lorsque vous cliquez sur un bouton et il envoie un XmlHttpRequest qui appelle un rappel que les changements de la structure des données, destructeurs, et vous avez un autre bouton qui change la même structure de données directement, entre le moment où l'événement a été déclenché et quand le retour d'appel a été exécuté, l'utilisateur pourrait avoir cliqué et mise à jour de la structure de données avant le rappel qui pourrait perdre de la valeur.
Alors que vous pourriez créer une condition de course comme ça, c'est très facile de prévenir que, dans votre code, puisque chaque fonction sera atomique. Il serait beaucoup de travail et de prendre un peu bizarre modèles de codage pour créer la condition de la course en fait.