Sobes.tech
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)
}