Sobes.tech
Middle+

Wat heb je gebruikt voor synchronisatie in multithreading?

sobes.tech AI

Antwoord van AI

In Go worden de volgende mechanismen gewoonlijk gebruikt voor synchronisatie in gelijktijdigheid (goroutines):

  • Mutex (sync.Mutex) — voor onderlinge uitsluiting bij toegang tot gedeelde bronnen.

  • RWMutex (sync.RWMutex) — voor het scheiden van lees- en schrijfbewerkingen, waardoor meerdere lezers gelijktijdig kunnen lezen, maar schrijven wordt geblokkeerd.

  • WaitGroup (sync.WaitGroup) — om te wachten tot een groep goroutines klaar is.

  • Kanaal (channels) — voor gegevensoverdracht en synchronisatie tussen goroutines, vaak de voorkeursmethode in Go.

  • Atomische operaties (sync/atomic) — voor low-level synchronisatie zonder locks.

Voorbeeld van het gebruik van Mutex:

var mu sync.Mutex
var counter int

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

In Go wordt het gebruik van kanalen voor synchronisatie vaak aanbevolen, volgens het principe "deel geen geheugen, deel kanalen".