Sobes.tech
Junior — Middle

Leg uit wat een voorwaardelijke variabele is en hoe deze wordt gebruikt voor het synchroniseren van threads.

sobes.tech AI

Antwoord van AI

De condition variable (voorwaardevariabele) is een synchronisatie-mechanisme voor threads dat het mogelijk maakt dat één of meerdere threads wachten op het optreden van een bepaalde voorwaarde, terwijl een andere thread hen informeert over een verandering van toestand.

In Go worden conditionele variabelen geïmplementeerd via het type sync.Cond. Het werkt samen met een mutex (sync.Mutex), dat gedeelde gegevens beschermt. De thread die wil wachten, roept Wait() aan, waardoor de mutex wordt vrijgegeven en de thread wordt geblokkeerd totdat een andere thread Signal() (om één thread wakker te maken) of Broadcast() (om alle wachtenden wakker te maken) aanroept.

Voorbeeld van gebruik:

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

// Wachtende thread
mu.Lock()
for !sharedDataReady {
    cond.Wait() // vrijgeeft mu en wacht op signaal
}
// Hier is sharedDataReady == true
mu.Unlock()

// Wijzigende thread
mu.Lock()
sharedDataReady = true
cond.Signal() // of cond.Broadcast(), om wachtenden wakker te maken
mu.Unlock()

Op deze manier helpt de conditionele variabele bij het organiseren van correcte wachten en notificatie tussen threads, en voorkomt actief polling en racecondities.