Gegeben sind zwei Tasks und mit folgenden kritischen Sektionen: und . Task startet zuerst. Während der Ausführung mit Semaphor startet Task . Beide Tasks 'verhakeln' sich durch wechselseitige Anforderungen, da das Priority Inference Protokoll keine Regel besitzt, um Konflikte bei wechselseitigen Anforderungen zu verhindern.
Im Detail: Task tritt als erster auf und kann seine Ausführung beginnen, da kein anderer Task ihn daran hindert. Der Eintritt in die kritische Sektion mit Semaphor ist problemlos. Während der Nutzung von Semaphor tritt Task auf. Da er eine höhere nominelle Priorität besitzt als Task kann er seine nichtkritische Sektion ausführen und Task muß warten. Dies gilt auch dann, wenn Task in die Abarbeitung seiner kritrischen Sektion mit Semaphor eintreten will. Da dieser Semaphor zu diesem Zeitpunkt von keinem anderen Task direkt belegt wird, kann Task die Abarbeitung beginnen, da er auch eine höhere Priorität als Task besitzt. Innerhalb der Nutzung von Semaphor stößt Task dann auf die eingebettete kritische Sektion mit Semaphor . Bei der Anforderung von Semaphor stößt er auf Task , der diesen Semaphor noch unter Kontrolle hat. Task wird durch Task blockiert und muß zusätzlich noch für die Dauer der Nutzung von Semaphor seine Priorität an Task abgeben. Nun kann Task seine Nutzung von Semaphor fortsetzen. Während dieser Nutzung stößt task auf die kritische Sektion mit Semaphor . Dieser wird aber von Task kontrolliert. Also muß auch Task warten. Da nun beide Tasks wechselseitig aufeinander warten müssen, liegt ein Deadlock vor.
Intuitiv ist klar, dass der Konflikt dadurch auftritt, dass im Fall von eingebetteten kritischen Sektionen eigentlich alle Semaphoren , die relativ zum ersten Semaphor einer kritischen Sektion eingebettet sind, 'vorbeugend' reserviert werden müssen, um solche Blockaden zu verhinden. Eine Strategie, um solche Blockierungen vorbeugend auszuschließen, bietet das Priority-Ceiling Protokoll von Sha et al. (1990)[102] Dies soll kurz besprochen werden.
Gerd Doeben-Henisch 2013-01-16