Aufgabe zum Vortrag „Verifikationsverfahren für parallele Programme – partielle Korrektheit“ Wechselseitiger Ausschluss: Petersons Algorithmus Im folgenden betrachten wir Petersons Algorithmus zum wechselseitigen Ausschluss. Zwei Threads mit gemeinsamen Speicher wollen auf einen kritischen Abschnitt zugreifen. Es soll sich zu jedem Zeitpunkt maximal ein Thread in diesem Abschnitt befinden. Das besondere an diesem Algorithmus, dass er keine hardwareseitige Unterstützung (z.B. test-andset-Operationen) benötigt. Die einzig atomare Operation ist ein einzelner Lese- oder Schreibzugriff im Speicher. Init: flag1 = false; flag2 = false; start(Thread 1); start(Thread 2); Thread 1: while (true) { Thread 2: while (true) { // nicht-kritischer Abschnitt // nicht-kritischer Abschnitt flag1 = true; loser = 1; while(flag2 && loser == 1) {}; flag2 = true; loser = 2; while(flag1 && loser == 2) {}; // kritischer Abschnitt // kritischer Abschnitt flag1 = false; }; flag2 = false; }; Aufgabe: Was ist die Bedeutung der gemeinsamen Variablen "flag1", "flag2" und "loser"? Beschreibe die Funktionsweise des Algorithmus und argumentiere informell, wie der wechselseitige Ausschluss garantiert wird. Hinweis: Die Auswertung der Bedingung in der while-Schleife ist nicht atomar! Es kann also vorkommen, dass in Thread 1 zwischen dem Auswerten von "flag2" und "loser == 1" beliebig viele Operationen von Thread 2 ausgeführt werden.
© Copyright 2024 ExpyDoc