Middle+
Jaké primitivy synchronizace gorutin v Go existují?
sobes.tech AI
Odpověď od AI
V jazyce Go se pro synchronizaci gorutin používají následující základní primitivy:
- Mutex (sync.Mutex) — zajišťuje vzájemné vyloučení tím, že blokuje přístup ke sdíleným zdrojům.
- RWMutex (sync.RWMutex) — rozšíření Mutex, které umožňuje více čtením současně, ale blokuje zápis.
- WaitGroup (sync.WaitGroup) — umožňuje čekat na dokončení sady gorutin.
- Channel (chan) — kanál pro přenos dat mezi gorutinami, zajišťuje synchronizaci prostřednictvím odesílání zpráv.
- Once (sync.Once) — zaručuje, že určitá funkce bude provedena pouze jednou.
- Cond (sync.Cond) — podmíněná proměnná pro složitější synchronizaci, například čekání na určitý stav.
Příklad použití 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("Čítač:", counter)
}