« »

Lock-Variablen

Der folgende C-Code zeigt eine fehlerhafte und unvollständige Implementierung der acquire- und release-Operationen für eine Lockvariable Lock.

// Lockvariable
typedef unsigned char Lock;

// Kritischen Abschnitt betreten
void acquire(Lock *lock) {
    while (*lock);
    *lock = 1;
}

// Kritischen Abschnitt verlassen
void release(Lock *lock) {
    // hier ergänzen
}

Diese Aufgabe war Teil der Klausur im Sommersemester 2024 (Zweittermin).

a)

Level 3: Anwenden

An welcher Stelle im Code kann ein Problem auftreten und welche Folgen kann dies haben? Geben Sie die betroffene(n) Zeilennummer(n) mit an.

Lösung
  • zwischen Zeile 6 und Zeile 7
  • acquire selbst ist ein kritischer Abschnitt, wird aber nicht entsprechend geschützt
  • kann dazu führen, dass zwei Prozesse den kritischen Abschnitt betreten

b)

Level 3: Anwenden

Ergänzen Sie die Implementierung der release-Funktion in Zeile 12 so, dass das Lock korrekt freigegeben wird.

Lösung
*lock = 0;

Lernziele

In dieser Aufgabe …

  • vertiefen die Studierenden ihr Verständnis von Lock-Objekten durch praktische Implementierung.
  • erkennen die Studierenden die Bedeutung kritischer Abschnitte im Beispiel.