« »

Mutex-Synchronisation

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);
//

a)

Level 3: Anwenden

Wie viele Threads befinden sich maximal gleichzeitig im kritischen Abschnitt?

Lösung

1 Thread:

  • mutex wurde mit 1 initialisiert (binärer Semaphor)
  • erster Aufruf von wait(mutex) schließt jeden weiteren Thread aus, bis signal(mutex) aufgerufen wird

b)

Level 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.

Lösung

Nein, nicht verklemmungsfrei. Deadlock möglich, wenn:

  • Thread 2 führt wait(b) aus (B2 ist wahr) → wartet auf Signal, hält aber noch mutex
  • Thread 1 führt wait(mutex) aus → blockiert, weil T2 mutex noch nicht freigegeben hat
  • Thread 1 kann nie signal(b) senden → zirkuläres Warten → Deadlock

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.