Lernziele
In dieser Aufgabe …
- nutzen die Studierenden ihr Wissen über Synchronisationsmechanismen, um mögliche Ausführungspfade eines Programms zu analysieren.
- untersuchen die Studierenden ein gegebenes Programm auf das Vorhandensein von Deadlocks.
Diese Aufgabe war Teil der Klausur im Sommersemester 2025 (Zweittermin).
Zwei parallel laufende Threads T1 und T2 werden über Mutexe synchronisiert.
Die Bedingungen B1 und B2 in den beiden if-Statements hängen von Berechnungen ab, die im jeweils davor stehenden kritischen Abschnitt durchgeführt werden.
Die Mutexe sind wie folgt initialisiert: b = 0 und mutex = 1.
T1:
// …
wait(mutex);
if (B1) {
// kritischer Abschnitt
signal(b);
}
signal(mutex);
// …
T2:
// …
wait(mutex);
if (B2){
// kritischer Abschnitt
wait(b);
}
signal(mutex);
// …Level 3: Anwenden
Wie viele Threads befinden sich maximal gleichzeitig im kritischen Abschnitt?
1 Thread:
mutex wurde mit 1 initialisiert (binärer Semaphor)wait(mutex) schließt jeden weiteren Thread aus, bis signal(mutex) aufgerufen wirdLevel 3: Anwenden
Ist die Lösung verklemmungsfrei? Falls nein, geben Sie für Thread 1 und 2 jeweils an, bei welcher Instruktion die Verklemmung auftreten kann.
Nein, nicht verklemmungsfrei. Deadlock möglich, wenn:
wait(b) aus (B2 ist wahr) → wartet auf Signal, hält aber noch mutexwait(mutex) aus → blockiert, weil T2 mutex noch nicht freigegeben hatsignal(b) senden → zirkuläres Warten → DeadlockIn dieser Aufgabe …