next up previous contents
Next: Aufgabe Up: Prozesssynchronisation Previous: Aktives Warten   Contents


Peterson Lösung

Peterson hat 1981 vorgeschlagen zwei Prozeduren zu benutzen, die jeweils aufgerufen werden, wenn ein Prozess in seinen kritischen Bereich eintritt bzw. wenn er ihn wieder verlässt.

Figure: Peterson Lösung
\begin{figure}\begin{center}
\begin{program}
void enter_region (int process)
...
...ess)
\par\{ interested [process] = 0; \}
\end{program} \end{center}\end{figure}

In dieser Lösung haben die Prozesse die Nummern 0 und 1. Betrachten wir einen Prozess, der gerade in die Prozedur enter_region eintritt. Zunächst wird der andere Prozess festgestellt. Dann wird das Feld interested für den betrachteten Prozess gesetzt. Und nun erhält die Variable loser die Prozessnummer des betrachteten Prozesses. Hat nun auch der andere Prozess Interesse in seinen kritischen Bereich einzutreten (interested [other] = 1), so ist entweder der andere Prozess in seinem kritischen Bereich, dann muss der betrachtete Prozess warten. Wenn der andere Prozess aber auch gerade versucht (zwischen interested [process] = 1 und while ( ...)) in seinen kritischen Bereich einzutreten, so wird loser umgesetzt und der betrachtete Prozess kann in seinen kritischen Bereich eintreten. Verlässt der andere Prozess durch leave_region seinen kritischen Bereich, so wird interested [other] = 0 gesetzt und der betrachtete Prozess kann in seinen kritischen Bereich eintreten.

Dieser Ansatz erlaubt, dass Prozesse nicht unbedingt abwechselnd in ihre kritischen Bereiche eintreten müssen. Es wird aber auch hier aktiv gewartet.



Subsections
next up previous contents
Next: Aufgabe Up: Prozesssynchronisation Previous: Aktives Warten   Contents
Prof. Dr. Pluemicke 2003-05-10