Middle+
Čo ste použili na synchronizáciu v multithreadingu?
sobes.tech AI
Odpoveď od AI
V Go sa bežne používané nasledujúce mechanizmy na synchronizáciu v paralelnom spracovaní (goroutines):
-
Mutex (sync.Mutex) — na vzájomné vylúčenie prístupu ku zdieľaným zdrojom.
-
RWMutex (sync.RWMutex) — na rozdelenie prístupu na čítanie a zápis, umožňuje viacerým čitateľom čítať súčasne, ale blokuje pri zápise.
-
WaitGroup (sync.WaitGroup) — na čakanie na dokončenie skupiny goroutines.
-
Kanál (channels) — na prenos dát a synchronizáciu medzi goroutines, často preferovaný spôsob v Go.
-
Atómové operácie (sync/atomic) — na nízkoúrovňovú synchronizáciu bez zámkov.
Príklad použitia Mutex:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
V Go sa často odporúča používať kanály na synchronizáciu, podľa princípu "ne zdieľajte pamäť, zdieľajte kanály".