Sobes.tech
Junior — Middle

Erklären Sie, was eine Bedingungsvariable ist und wie sie zur Synchronisation von Threads verwendet wird.

sobes.tech KI

Antwort von AI

Die Bedingungsvariable (condition variable) ist ein Synchronisationsmechanismus für Threads, der es einem oder mehreren Threads ermöglicht, auf das Eintreten einer bestimmten Bedingung zu warten, während ein anderer Thread sie über eine Zustandsänderung informiert.

In Go werden bedingte Variablen durch den Typ sync.Cond implementiert. Sie arbeitet zusammen mit einem Mutex (sync.Mutex), der gemeinsame Daten schützt. Der Thread, der warten möchte, ruft Wait() auf, wodurch der Mutex freigegeben und der Thread blockiert wird, bis ein anderer Thread Signal() (um einen Thread aufzuwecken) oder Broadcast() (um alle wartenden Threads aufzuwecken) aufruft.

Beispiel für die Verwendung:

var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false

// Wartender Thread
mu.Lock()
for !sharedDataReady {
    cond.Wait() // gibt mu frei und wartet auf Signal
}
// Hier ist sharedDataReady == true
mu.Unlock()

// Thread, der den Zustand ändert
mu.Lock()
sharedDataReady = true
cond.Signal() // oder cond.Broadcast(), um alle wartenden Threads zu wecken
mu.Unlock()

Auf diese Weise hilft die bedingte Variable, eine korrekte Warten- und Benachrichtigungsorganisation zwischen Threads zu gewährleisten, und vermeidet aktive Abfragen und Race Conditions.