Sobes.tech
Senior

Welke synchronisatie-primitieven kent u?

sobes.tech AI

Antwoord van AI

In Go zijn er verschillende belangrijke primitieve synchronisaties voor het beheren van gelijktijdige toegang tot bronnen:

  • Mutex (sync.Mutex) — zorgt voor onderlinge uitsluiting, blokkeert toegang tot het kritieke gedeelte.
  • RWMutex (sync.RWMutex) — uitgebreide mutex die meerdere lezers gelijktijdig lezen toestaat, maar schrijven blokkeert.
  • WaitGroup (sync.WaitGroup) — maakt het mogelijk te wachten tot een groep goroutines klaar is.
  • Cond (sync.Cond) — voorwaardelijke variabele om goroutines te informeren over het optreden van een gebeurtenis.
  • Atomische operaties (sync/atomic) — low-level operaties voor atomair lezen en schrijven van variabelen.

Daarnaast worden in Go veelvuldig kanalen (channels) gebruikt, die het mogelijk maken om goroutines te synchroniseren en gegevens tussen hen over te dragen zonder expliciet mutexgebruik.

Voorbeeld van gebruik van Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

Voorbeeld van gebruik van WaitGroup:

var wg sync.WaitGroup
wg.Add(2)
go func() {
    defer wg.Done()
    // werk
}()
go func() {
    defer wg.Done()
    // werk
}()
wg.Wait()