Weiteres Beispiel für PC

Ein anderes Beispiel (vgl.Sha, Rajkumar und Lehoczky (1990)[102]:p.1180): Task $\tau_{0}$ besitzt die kritischen Sektionen $z_{0.0}$ und $z_{0.1}$ mit den Aufrufen $\{... L(S_{0}),...U(S_{0}).. .L(S_{1}),... U(S_{1})...\}$. Task $\tau_{1}$ besitzt die kritische Sektion $z_{1.0}$ mit den Aufrufen $\{... L(S_{2}),...U(S_{2})...\}$ und Task $\tau_{2}$ besitzt die kritischen Sektionen $z_{2.0}$ und $z_{2.1}$ mit den Aufrufen $\{... L(S_{2}),...L(S_{1})...U(S_{1}),... U(S_{2})...\}$.

Figure 5.6: PC verhindert Deadlock
\includegraphics[width=4.0in]{tabelle_2ndexample.eps}

Task $\tau_{2}$ beginnt mit der Ausführung seiner unkritischen Sektion und startet auch die Nutzung von Semaphor $S_{2}$. Dann tritt Task $\tau_{1}$ auf. Da er eine höhere nominelle Priorität als Task $\tau_{2}$ besitzt, kann er die Ausführung seiner unkritischen Sektion beginnen und Task $\tau_{2}$ wird blockiert. Wenn Task $\tau_{1}$ dann seine kritische Sektion mit Semaphor $S_{2}$ beginnen will, muß er eine höhere Priorität haben als der aktuell genutzte Semaphor mit dem höchsten Ceilingwert; dies ist zur Zeit $C(S_{2}) = 2$. Der Task $\tau_{1}$ hat aber selbst nur den Wert $P = 2$. Also wird Task $\tau_{1}$ von Task $\tau_{2}$ geblockt und Task $\tau_{2}$ kann die Nutzung von Semaphor $S_{2}$ fortsetzen. Zugleich erbt er (inherits) die Priorität von Task $\tau_{1}$ für die Dauer der Nutzung von Semaphor $S_{2}$, also $P_{2}=2$. Dann kommt Task $\tau_{2}$ zur kritischen Sektion mit Semaphor $S_{1}$. Da aktuell kein anderer Task einen Semaphor nutzt kann er die Kontrolle übernehmen. Während der Nutzung tritt Task $\tau_{0}$ auf. Wegen einer höheren nominellen Priorität als Task $\tau_{2}$ kann Task $\tau_{0}$ die Abarbeitung seiner unkritischen Sektion beginnen und Task $\tau_{2}$ wird blockiert. Wenn Task $\tau_{0}$ dann zur ersten kritischen Sektion mit Semaphor $S_{1}$ kommt, kann er die Kontrolle aber nicht gewinnen, da Task $\tau_{2}$ aktuell die Kontrolle besitzt und Task $\tau_{0}$ eine höhere Priorität als $P =1$ benötigen würde. Er hat aber nur die Priorität $P =1$. Also wird Task $\tau_{0}$ von Task $\tau_{2}$ blockiert. Außerdem erbt (inherits) Task $\tau_{2}$ die Priorität von Task $\tau_{0}$ für die Dauer der Abarbeitung von Semaphor $S_{1}$, also $P_{2}=1$. Am Ende der Nutzung von Semaphor $S_{1}$ durch Task $\tau_{2}$ will Task $\tau_{2}$ seine kritische Phase mit Semaphor $S_{2}$ beginnen und Task $\tau_{0}$ die Nutzung von Semaphor $S_{0}$. Ferner gibt es aktuell noch die Anfrage von den Task $\tau_{1}$, wobei Task $\tau_{2}$ immer noch die Kontrolle von Semaphor $S_{2}$ besitzt. Also wird zu diesem Zeitpunkt noch der Semaphor $S_{2}$ mit $C(S_{2}) = 2$ benutzt. Da Task $\tau_{0}$ eine höhere Priorität besitzt, kann er mit der Nutzung von Semaphor $S_{0}$ beginnen. Nach Beendigung der kritischen Sektion mit Semaphor $S_{0}$ will Task $\tau_{0}$ in die Nutzung des Semaphors $S_{1}$ eintreten. Auch dies geht aufgrund seiner höheren nominellen Priorität. Wenn Task $\tau_{0}$ Semaphor $S_{1}$ wieder frei gibt, dann kann Task $\tau_{2}$ mit der geerbten Priorität $P_{2}=2$ seine Nutzung von Semaphor $S_{2}$ fortsetzen. Nach Beendigung der Nutzung von Semaphor $S_{2}$ kann dan Task $\tau_{1}$ in seine kritische Sektion eintreten und Semaphor $S_{2}$ nutzen.

Gerd Doeben-Henisch 2013-01-16