Javascript ist als wiedereintrittsfähige Sprache definiert. Dies bedeutet, dass dem Benutzer kein Threading zur Verfügung steht und möglicherweise Threads in der Implementierung vorhanden sind. Funktionen wie setTimeout()
und asynchrone Rückrufe müssen warten, bis die Skript-Engine in den Ruhezustand versetzt wurde, bevor sie ausgeführt werden können.
Das bedeutet, dass alles, was in einem Ereignis passiert, beendet sein muss, bevor das nächste Ereignis verarbeitet wird.
Abgesehen davon benötigen Sie möglicherweise einen Mutex, wenn Ihr Code etwas tut, bei dem erwartet wird, dass sich ein Wert zwischen dem Auslösen des asynchronen Ereignisses und dem Aufrufen des Rückrufs nicht ändert.
Wenn Sie beispielsweise eine Datenstruktur haben, in der Sie auf eine Schaltfläche klicken und eine XmlHttpRequest sendet, die einen Rückruf aufruft, ändert sich die Datenstruktur destruktiv, und Sie haben eine andere Schaltfläche, die dieselbe Datenstruktur zwischen dem Zeitpunkt des Ereignisses direkt ändert ausgelöst und wenn der Rückruf ausgeführt wurde, hätte der Benutzer vor dem Rückruf auf die Datenstruktur klicken und diese aktualisieren können, wodurch der Wert verloren gehen könnte.
Während Sie eine solche Race-Bedingung erstellen könnten, ist es sehr einfach, dies in Ihrem Code zu verhindern, da jede Funktion atomar ist. Es wäre eine Menge Arbeit und würde einige seltsame Codierungsmuster erfordern, um die Rennbedingung tatsächlich zu erstellen.