Senior
Milliseid sünkronsusprimitiive teate?
sobes.tech AI
Vastus AI-lt
Go keeles on mitu peamist sünkroniseerimise primitiivi, mis võimaldavad hallata konkurentsivõimelist juurdepääsu ressurssidele:
- Mutex (sync.Mutex) — tagab vastastikuse välistamise, blokeerides juurdepääsu kriitilisele sektsioonile.
- RWMutex (sync.RWMutex) — laiendatud mutex, mis võimaldab mitmel lugejal samaaegselt lugeda, kuid blokeerib kirjutamise.
- WaitGroup (sync.WaitGroup) — võimaldab oodata, kuni goroutine'ide grupp lõpetab.
- Cond (sync.Cond) — tingimusmuutuja, mis teavitab goroutine'e sündmuse toimumisest.
- Aatomilised operatsioonid (sync/atomic) — madala taseme operatsioonid, mis teostavad atomilist lugemist ja kirjutamist muutujatele.
Lisaks kasutatakse Go-s laialdaselt kanaleid (channels), mis võimaldavad goroutine'e sünkroniseerida ja andmeid nende vahel edastada ilma mutex'eid kasutamata.
Mutex näide:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
WaitGroup näide:
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
// töö
}()
go func() {
defer wg.Done()
// töö
}()
wg.Wait()