JavaScript è definito come linguaggio risentito che significa che non ci sono thread esposti all’utente, potrebbero esserci sottoprocessi nell’attuazione. Le funzioni come setTimeout()
e le rese di chiamata asincrona devono attendere che il motore di script venga sospeso prima che possano essere eseguiti.
significa che tutto ciò che accade a un evento deve essere finito prima che venga elaborato il prossimo evento.
Detto che, potresti aver bisogno di un mutex se il tuo codice fa qualcosa in cui ti aspetti un valore di cambiare tra il momento in cui hai innescato l’evento asincrono e il momento in cui è stato chiamato callback.
Ad esempio, se si dispone di una struttura dati in cui si fa clic su un pulsante e inviare un XMLHTTPRequest che chiama un callback, modifica la struttura dei dati in modo distruttivo e ha un altro pulsante che cambia direttamente la stessa struttura dei dati, tra Quando è stato colpito l’evento e quando è stata eseguita la richiamata, l’utente potrebbe aver fatto clic e aggiornato la struttura dei dati prima della callback, che potrebbe perdere valore.
Mentre puoi creare una condizione di carriera del genere, è molto facile evitarlo nel tuo codice, poiché ogni funzione sarà atomica. Sarebbe un sacco di lavoro e sarebbero stati necessari alcuni strani schemi di codifica per creare in effetti la condizione di carriera.