Was ist eine Rennbedingung?
Die Situation, in der ein Prozess entscheidend von der Reihenfolge oder dem Zeitpunkt anderer Ereignisse abhängt.
Zum Beispiel, Prozessor A und Prozessor B beide Bedürfnisse identische Ressourcen für ihre Ausführung.
Wie kann man sie erkennen?
Es gibt Tools zur automatischen Erkennung von Race Conditions:
Wie gehen Sie mit ihnen um?
Race Condition kann behandelt werden durch Mutex o Semaphoren . Sie fungieren als eine Sperre, die es einem Prozess ermöglicht, eine Ressource auf der Grundlage bestimmter Anforderungen zu erwerben, um Wettlaufbedingungen zu verhindern.
Wie kann man sie verhindern?
Es gibt verschiedene Möglichkeiten, Wettlaufbedingungen zu verhindern, z. B. Vermeidung von kritischen Abschnitten .
- Keine zwei Prozesse liegen gleichzeitig in ihren kritischen Regionen. ( Gegenseitiger Ausschluss)
- Es werden keine Annahmen über Geschwindigkeiten oder die Anzahl der CPUs gemacht.
- Kein Prozess, der außerhalb seines kritischen Bereichs läuft und andere Prozesse blockiert.
- Kein Prozess muss ewig warten, bis er in seinen kritischen Bereich eintritt. (A wartet auf B Ressourcen, B wartet auf C Ressourcen, C wartet auf A Ressourcen)
10 Stimmen
Ich möchte darauf hinweisen, dass - ohne Angabe der Sprache - die meisten Teile dieser Frage nicht richtig beantwortet werden können, da die Definition, die Folgen und die Instrumente zu ihrer Verhinderung in den verschiedenen Sprachen unterschiedlich sein können.
0 Stimmen
@MikeMB. Einverstanden, außer bei der Analyse der Ausführung von Bytecode, wie sie von Race Catcher durchgeführt wird (siehe diesen Thread stackoverflow.com/a/29361427/1363844 ) können wir all die etwa 62 Sprachen ansprechen, die sich zu Bytecode kompilieren lassen (siehe de.wikipedia.org/wiki/Liste_der_JVM_Sprachen )