Sobes.tech
Middle+

Aké primitívy synchronizácie goroutines existujú v Go?

sobes.tech AI

Odpoveď od AI

V jazyku Go sa na synchronizáciu gorutín používajú nasledujúce základné primitívy:

  • Mutex (sync.Mutex) — zabezpečuje vzájomné vylúčenie, blokujúc prístup ku zdieľaným zdrojom.
  • RWMutex (sync.RWMutex) — rozšírenie Mutex, ktoré umožňuje viacerým gorutinám čítať súčasne, ale blokuje zápis.
  • WaitGroup (sync.WaitGroup) — umožňuje čakať na dokončenie skupiny gorutín.
  • Channel (chan) — kanál na prenos dát medzi gorutinami, zabezpečuje synchronizáciu prostredníctvom odosielania správ.
  • Once (sync.Once) — garantuje, že určitá funkcia bude vykonaná iba raz.
  • Cond (sync.Cond) — podmienková premenná pre zložitejšiu synchronizáciu, napr. čakanie na určitý stav.

Príklad použitia WaitGroup a 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("Počítadlo:", counter)
}