Bsp: Kein Deadlock mit PC

Gegeben sind zwei Tasks $\tau_{1}$ und $\tau_{2}$ mit folgenden kritischen Sektionen: $\tau_{1} = \langle ... L(S_{a})...L(S_{b})... U(S_{b})...U(S_{a}) \rangle$ und $\tau_{2} = \langle ... L(S_{b})...L(S_{a})... U(S_{a})...U(S_{b}) \rangle$. Task $\tau_{2}$ startet zuerst ohne aktuelle Konkurrenz. Bei der Anforderung der Ressource $S_{b}$ gibt es auch keine Probleme, da sowohl die Ressource $S_{b}$ noch frei als auch keine anderen Semaphoren belegt sind. Während der Nutzung von Semaphor $S_{b}$ tritt Task $\tau_{1}$ auf. Da er in seiner nichtkritischen Sektion keine Ressource beansprucht und eine höhere nominelle Priorität als die von Task $\tau_{1}$ besitzt, wird Task $\tau_{2}$ in seiner Ausführung unterbrochen (preempted). Wenn Task $\tau_{1}$ dann zu seiner kritischen Sektion mit Semaphor $S_{a}$ kommt, wird jetzt aber das neue PC-Protokoll wirksam: Obgleich die Ressource Semaphor $S_{a}$ momentan noch ungenutzt ist, muß der anfragende Task $\tau_{1}$ eine höhere Priorität besitzen, als den Ceilingwert des aktuell schon genutzten Semaphors mit höchstem Wert; dies ist aktuell Semaphor $S_{b}$ mit $C(S_{b})=1$. Da Task $\tau_{1}$ auch nur eine Priorität von 1 hat, kann er den Semaphor $S_{a}$ nicht belegen. Er muß warten. Er wird von Task $\tau_{2}$ blockiert. Task $\tau_{2}$ kann seine Bearbeitung von Semaphor $S_{b}$ fortsetzen. Wenn Task $\tau_{2}$ dann zu seiner kritischen Sektion mit Semaphor $S_{a}$ gelangt, tritt wieder das PC-Protokoll in Kraft: um Semaphor $S_{a}$ benutzen zu können, muß er eine höhere Priorität haben als ein Semaphor, der von einem anderen Task benutzt wird. Da aktuell kein anderer Task einen anderen Semaphor benutzt hat Task $\tau_{2}$ eine hinreichende Priorität, also kann er auch den Semaphor $S_{a}$ kontrollieren, zu Ende ausführen, und dann seine kritische Sektion mit Semaphor $S_{b}$ abschließen. Mit Freigabe von Semaphor $S_{b}$ kann Task $\tau_{1}$ seine Arbeit fortsetzen. Jetzt bekommt er die Kontrolle über Semaphor $S_{a}$, kann den kritischen Kodeabschnitt ausführen, kann mit mit Semaphor $S_{b}$ fortsetzen und dann mit Semaphor $S_{a}$ abschließen. Ein Deadlock tritt nicht auf.

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

Gerd Doeben-Henisch 2013-01-16