next up previous contents
Next: Peterson Lösung Up: Prozesssynchronisation Previous: Kritische Bereiche   Contents


Aktives Warten

Einen ersten Ansatz dieses Problem zu lösen bietet das aktive Warten. Betrachten wir die zwei C-Programmstücke in Abbildung [*].

Figure: Aktives Warten
\begin{figure}\begin{center}
\begin{program}
\textrm{Prozess 1:} \textrm{Proze...
...ection(); noncritical_section();
\} \}
\end{program} \end{center}\end{figure}

In den beiden Programmstücken ist die Variable turn eine Variable auf die beide Prozesse gleichermaßen zugreifen können. Dies lässt sich beispielsweise durch das Thread-Konzept (vgl. Kapitel [*]) realisieren. Wenn nun Prozess 1 in einen kritischen Bereich eintreten will, so wird die Variable turn auf 0 geprüft. Ist sie ungleich 0 bleibt der Prozess in der While-Schleife bis die Variable den Wert 0 annimmt. Die Variable turn wird durch Prozess 2 auf 0 gesetzt, wenn er seinen kritischen Bereich verlässt. Dann kann auch Prozess 1 in seinen kritischen Bereich eintreten. Nun ist es aber Prozess 2 unmöglich wiederum in seinen kritischen Bereich einzutreten, solange turn nicht auf 1 gesetzt wird. Der Ansatz des aktiven Wartens ist eine Lösung des Problems, sollte aber nur dann verwendet werden, wenn sicher ist, dass die Prozesse jeweils nicht allzulange warten müssen, weil das aktive Warten Rechenzeit verbraucht. Außerdem wird verlangt, dass Prozesse streng abwechselnd in ihre kritischen Bereiche eintreten, was in der Regel auch nicht den gegebenen Problemen entspricht.


next up previous contents
Next: Peterson Lösung Up: Prozesssynchronisation Previous: Kritische Bereiche   Contents
Prof. Dr. Pluemicke 2003-05-10