Gegeben sind zwei Tasks und
mit folgenden kritischen Sektionen:
und
. Task
startet zuerst ohne aktuelle Konkurrenz. Bei der Anforderung der Ressource
gibt es auch keine Probleme, da sowohl die Ressource
noch frei als auch keine anderen Semaphoren belegt sind. Während der Nutzung von Semaphor
tritt Task
auf. Da er in seiner nichtkritischen Sektion keine Ressource beansprucht und eine höhere nominelle Priorität als die von Task
besitzt, wird Task
in seiner Ausführung unterbrochen (preempted). Wenn Task
dann zu seiner kritischen Sektion mit Semaphor
kommt, wird jetzt aber das neue PC-Protokoll wirksam: Obgleich die Ressource Semaphor
momentan noch ungenutzt ist, muß der anfragende Task
eine höhere Priorität besitzen, als den Ceilingwert des aktuell schon genutzten Semaphors mit höchstem Wert; dies ist aktuell Semaphor
mit
. Da Task
auch nur eine Priorität von 1 hat, kann er den Semaphor
nicht belegen. Er muß warten. Er wird von Task
blockiert. Task
kann seine Bearbeitung von Semaphor
fortsetzen. Wenn Task
dann zu seiner kritischen Sektion mit Semaphor
gelangt, tritt wieder das PC-Protokoll in Kraft: um Semaphor
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
eine hinreichende Priorität, also kann er auch den Semaphor
kontrollieren, zu Ende ausführen, und dann seine kritische Sektion mit
Semaphor
abschließen. Mit Freigabe von Semaphor
kann Task
seine Arbeit fortsetzen. Jetzt bekommt er die Kontrolle über Semaphor
, kann den kritischen Kodeabschnitt ausführen, kann mit mit Semaphor
fortsetzen und dann mit Semaphor
abschließen. Ein Deadlock tritt nicht auf.
Gerd Doeben-Henisch 2013-01-16