Sobes.tech
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át n-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ű az Add(-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.