Race Conditions und Semaphoren

Unter einer Race Condition (race hazard) versteht man den Zustand zweier Prozesse, die sich in einer Wettlaufsituation um eine gemeinsame Ressource befinden. Das Endergebnis dieser Race Condition hängt stark vom zeitlichen Verhalten der beiden Prozesse ab. Bereits eine geänderte Bedingung (Race Condition führt zum Fehler -> Debugging wird angestellt) kann zu einem vollkommen anderen Verhalten, bis hin zum Verschwinden der Race Condition führen.

Gegeben sind zwei Prozesse A und B, die nacheinander Ablaufen. Sie lesen einen Wert (13, den logisch gleichen) ein und erhöhen diesen jeweils um 1 (A 13 zu 14 | B 14 zu 15). Es kommt zu keinem Problem. Starten die beiden Prozesse hingegen gleichzeitig, so lesen beide den Wert 13 ein, erhöhen und versuchen diesen wieder zu speichern. Sie befinden sich in einer Race Condition, da beide nun den Wert 14 schreiben wollen. Wenn Prozesse bzw. Threads gleichzeitig oder zeitlich verschränkt gemeinsam genutzte Datenstrukturen (unkoordiniert) verändern befinden sich diese in einer Mutual Exclusion.

Zur Lösung dieses Problems setzt man Locks oder Semaphoren ein. Semaphoren sind Signalgeber und kommen aus dem Eisenbahnbereich. Ein Eisenbahnsignal (Semaphore) gibt an, ob ein Bahngleis befahrbar ist, oder ob es derzeit belegt ist.

 

 

Von Alexander

Das Projekt derFernstudent.de ist für mich gleichermaßen Dokumentation und Erfahrungsbericht. Als Erfahrungsbericht für mein Fernstudium gestartet, dient es nun als Plattform, um mein Hobby und Wissen zu teilen. Ergänzt wird die Seite durch den YouTube Kanal

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.