JavaScript est défini comme une langue ressentielle, ce qui signifie qu’il n’y a pas de filetage exposé à l’utilisateur, il peut y avoir des sous-processus dans la mise en œuvre. Les fonctions telles que setTimeout()
et les rapports d’appel asynchrones doivent attendre que le moteur de script soit suspendu avant de pouvoir être exécuté.
Cela signifie que tout ce qui se passe lors d’un événement doit être terminé avant le traitement de l’événement suivant.
qui dit que, vous aurez peut-être besoin d’un mutex si votre code fait quelque chose où vous vous attendez à une valeur de changement entre le moment où vous avez déclenché l’événement asynchrone et le moment où il s’appelait le rappel.
Par exemple, si vous avez une structure de données dans laquelle vous cliquez sur un bouton et envoyez un fichier XMLHTTPRequest qui appelle un rappel, il modifie la structure de données de manière destructrice et a un autre bouton qui modifie directement la même structure de données, entre Lorsque l’événement a été tourné et lorsque le rappel a été exécuté, l’utilisateur aurait pu cliquer et mettre à jour la structure de données avant le rappel, ce qui pourrait perdre de la valeur.
Bien que vous puissiez créer une situation de carrière comme celle-ci, il est très facile de l’éviter dans votre code, car chaque fonction sera atomique. Ce serait beaucoup de travail et certains modèles de codage étranges seraient nécessaires pour créer en réalité la condition de carrière.