Sobes.tech
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.