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()