Junior — Middle
Hogyan garantálható, hogy egy programban minden futó goroutine befejeződik?
sobes.tech MI
Válasz az MI-től
Go nyelven nincs beépített mód arra, hogy külsőleg kényszerítve befejezzünk egy goroutine-t. Annak érdekében, hogy garantáltan várjuk meg az összes futó goroutine befejezését, általában a sync.WaitGroup szinkronizációt használjuk.
Működési elv:
- Minden goroutine indítása előtt meghívjuk a
wg.Add(1)-et. - A goroutine végén meghívjuk a
wg.Done()-t. - A fő függvényben meghívjuk a
wg.Wait()-t, ami blokkolja a végrehajtást, amíg a számláló el nem éri a nullát.
Példa:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// goroutine munka
}()
wg.Wait() // várja, hogy minden goroutine befejeződjön
Így a program garantáltan megvárja, hogy minden goroutine befejeződjön, mielőtt folytatná vagy befejeződik.