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".