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