Sobes.tech
Junior — Middle

Worin besteht der Unterschied zwischen dem Mutual-Exclusion-Mechanismus Lock und Semaphore bei der Steuerung des Zugriffs auf Ressourcen?

sobes.tech KI

Antwort von AI

Lock (Mutual Exclusion) und Semaphore (Semaphor) sind Synchronisationsmechanismen, unterscheiden sich jedoch in Funktionalität und Anwendung:

  • Lock (Mutex)

    • Dient dazu, exklusiven Zugriff auf eine Ressource zu gewährleisten.
    • Nur ein Thread kann den Lock zu einem Zeitpunkt besitzen.
    • Wenn der Lock belegt ist, warten andere Threads auf dessen Freigabe.
    • Wird zum Schutz kritischer Sektionen verwendet.
  • Semaphore

    • Hat einen Zähler, der bestimmt, wie viele Threads gleichzeitig Zugriff auf die Ressource haben können.
    • Kann mehreren Threads gleichzeitig Zugriff gewähren (z.B. ein Semaphor mit Zähler 3 erlaubt 3 Threads gleichzeitig).
    • Wird zur Steuerung des Zugriffs auf begrenzte Ressourcen verwendet.

Beispiel in C#:

// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // Zugriff
// kritischer Abschnitt
mutex.ReleaseMutex(); // Freigabe

// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // maximal 3 gleichzeitige Zugriffe
semaphore.WaitOne();
// Arbeit mit der Ressource
semaphore.Release();

Daher ist Lock ein spezieller Fall eines Semaphors mit einem Maximalzähler von 1.