Middle+
Kokios sinchronizacijos primityvos egzistuoja Go kalboje goroutine'ų valdymui?
sobes.tech AI
Atsakymas iš AI
Go kalboje pagrindiniai primitivi, naudojami gorutinų sinchronizacijai, yra šie:
- Mutex (sync.Mutex) — užtikrina tarpusavio išskyrimą, blokuodamas prieigą prie bendrų išteklių.
- RWMutex (sync.RWMutex) — Mutex plėtinys, leidžiantis kelioms gorutinoms vienu metu skaityti, bet blokuojantis rašymą.
- WaitGroup (sync.WaitGroup) — leidžia laukti, kol baigsis tam tikras gorutinų rinkinys.
- Channel (chan) — duomenų perdavimo kanalas tarp gorutinų, užtikrina sinchronizaciją per žinučių perdavimą.
- Once (sync.Once) — garantuoja, kad tam tikra funkcija bus vykdoma tik vieną kartą.
- Cond (sync.Cond) — sudėtingesnė sinchronizacijos sąlyginė kintamoji, pavyzdžiui, laukimas tam tikros būsenos.
Pavyzdys, kaip naudoti WaitGroup ir Mutex:
var mu sync.Mutex
var wg sync.WaitGroup
var counter int
func increment() {
defer wg.Done()
mu.Lock()
counter++
mu.Unlock()
}
func main() {
wg.Add(3)
go increment()
go increment()
go increment()
wg.Wait()
fmt.Println("Skaitiklis:", counter)
}