JavaScript este definit ca o limbă resentimente, ceea ce înseamnă că nu există fire expuse utilizatorului, pot exista subprocese în implementare. Funcțiile, cum ar fi setTimeout()
și returnarea apelurilor asincrone trebuie să aștepte suspendarea motorului de script înainte de a putea fi executată.
Asta înseamnă că tot ceea ce se întâmplă la un eveniment trebuie să fie terminat înainte ca următorul eveniment să fie procesat.
care a spus că, poate aveți nevoie de un mutex dacă codul dvs. face ceva în care vă așteptați la o valoare pentru a schimba între momentul în care ați declanșat evenimentul asincron și momentul în care a fost numit apel invers.
De exemplu, dacă aveți o structură de date în care faceți clic pe un buton și trimiteți un XMLHTTRequest care solicită un apel invers, modifică structura de date într-un mod distructiv și are un alt buton care modifică aceeași structură de date direct între Când evenimentul a fost împușcat și când apelul a fost executat, utilizatorul ar fi putut face clic și a actualizat structura de date înainte de apel invers, care ar putea pierde valoarea.
În timp ce puteți crea o condiție de carieră ca aceasta, este foarte ușor să o evitați în codul dvs., deoarece fiecare funcție va fi atomică. Ar fi o mulțime de muncă și ar fi necesare unele modele de codare ciudate pentru a crea condiția de carieră de fapt.