Junior — Middle
Jak zajistit, aby všechny spuštěné gorutiny v programu byly dokončeny?
sobes.tech AI
Odpověď od AI
V jazyce Go neexistuje vestavěný způsob, jak násilně ukončit gorutinu zvenčí. Aby bylo zaručeno, že všechny spuštěné gorutiny dokončí svůj běh, obvykle se používá synchronizace pomocí sync.WaitGroup.
Princip fungování:
- Před spuštěním každé gorutiny se zavolá
wg.Add(1). - Na konci gorutiny se zavolá
wg.Done(). - V hlavní funkci se zavolá
wg.Wait(), které blokuje provádění, dokud čítač nedosáhne nuly.
Příklad:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// práce gorutiny
}()
wg.Wait() // počkat na dokončení všech gorutin
Tímto způsobem program garantovaně počká na dokončení všech gorutin před pokračováním nebo ukončením.