Sobes.tech
Senior

Aké primitivy synchronizácie poznáte?

sobes.tech AI

Odpoveď od AI

V jazyku Go existuje niekoľko základných primitives synchronizácie na riadenie konkurenčného prístupu ku zdrojom:

  • Mutex (sync.Mutex) — zabezpečuje vzájomné vylúčenie, blokujúc prístup ku kritickej sekcii.
  • RWMutex (sync.RWMutex) — rozšírený mutex, ktorý umožňuje viacerým čitateľom čítať súčasne, ale blokuje zápis.
  • WaitGroup (sync.WaitGroup) — umožňuje čakať na dokončenie skupiny gorútín.
  • Cond (sync.Cond) — podmienková premenná na upozornenie gorútín o udalosti.
  • Atomické operácie (sync/atomic) — nízkoúrovňové operácie na atomické čítanie a zápis premenných.

Okrem toho sa v Go široko používajú kanály (channels), ktoré umožňujú synchronizáciu gorútín a prenos dát medzi nimi bez použitia mutexov.

Príklad použitia Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

Príklad použitia WaitGroup:

var wg sync.WaitGroup
wg.Add(2)
go func() {
    defer wg.Done()
    // práca
}()
go func() {
    defer wg.Done()
    // práca
}()
wg.Wait()