Junior — Middle
Lehetséges-e a Go program futása közben módosítani a WaitGroup-ban várakozó goroutine-ok számát?
sobes.tech MI
Válasz az MI-től
Go-ban a sync.WaitGroup-ban várakozó goroutine-ok száma futás közben módosítható az Add, Done és Wait metódusok segítségével.
- Az
Add(n int)metódus növeli vagy csökkenti a várakozó goroutine-ok számlálójátn-nel. Többször is hívható, hogy dinamikusan változtassa a várakozások számát. - A
Done()metódus egyenértékű azAdd(-1)-gyel, és csökkenti a számlálót 1-gyel. - A
Wait()blokkolja a végrehajtást, amíg a számláló el nem éri a nullát.
Fontos: ne hívja az Add-t negatív értékkel, ha a számláló már nulla, különben pánik keletkezik.
Példa:
var wg sync.WaitGroup
wg.Add(2) // 2 goroutine várakozik
go func() {
defer wg.Done()
// munka 1
}()
go func() {
defer wg.Done()
// munka 2
}()
// Folyamat közben további várakozásokat lehet hozzáadni
wg.Add(1)
go func() {
defer wg.Done()
// további munka
}()
wg.Wait() // várunk, amíg minden be nem fejeződik
Így a WaitGroup-ban várakozó goroutine-ok száma dinamikusan változhat, feltéve, hogy helyesen hívják az Add és Done metódusokat.