Javascript jest zdefiniowany jako język ponownie wprowadzany , co oznacza, że użytkownik nie ma żadnych wątków, a implementacja może zawierać wątki. Funkcje takie jak setTimeout()
i asynchroniczne wywołania zwrotne muszą czekać na uśpienie silnika skryptów, zanim będą mogły zostać uruchomione.
Oznacza to, że wszystko, co dzieje się w wydarzeniu, musi zostać zakończone, zanim następne zdarzenie zostanie przetworzone.
Biorąc to pod uwagę, możesz potrzebować muteksu, jeśli kod robi coś, w którym oczekuje, że wartość nie zmieni się między momentem uruchomienia zdarzenia asynchronicznego a wywołaniem wywołania zwrotnego.
Na przykład, jeśli masz strukturę danych, w której klikasz jeden przycisk i wysyła ona XmlHttpRequest, która wywołuje wywołanie zwrotne, zmienia strukturę danych w destrukcyjny sposób, i masz inny przycisk, który zmienia tę samą strukturę danych bezpośrednio, między momentem, w którym zdarzenie zostało uruchomione, a gdy wywołanie zwrotne zostało wykonane, użytkownik mógł kliknąć i zaktualizować strukturę danych przed wywołaniem zwrotnym, co może spowodować utratę wartości.
Chociaż możesz stworzyć taki stan wyścigu, bardzo łatwo jest temu zapobiec w swoim kodzie, ponieważ każda funkcja będzie atomowa. Wymagałoby to dużo pracy i wymagałoby kilku dziwnych wzorców kodowania, aby w rzeczywistości stworzyć warunki wyścigu.