Sobes.tech
Junior

Hogyan lehet a (Go) programozási nyelvben nyomon követni, hogy minden futó szál befejeződött-e, és a fő szál használhatja az eredményeket?

sobes.tech MI

Válasz az MI-től

Go nyelvben a futó goroutine-ok befejezésének nyomon követésére általában a sync.WaitGroup típust használják. Ez lehetővé teszi a fő szál számára, hogy várjon, amíg minden goroutine be nem fejezi a végrehajtást.

Használati példa:

var wg sync.WaitGroup

wg.Add(3) // 3 goroutine várása

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // jelzi a goroutine befejezését
        // goroutine munka
        fmt.Println("Goroutine", id, "befejeződött")
    }(i)
}

wg.Wait() // a fő szál blokkolódik, amíg a wg számlálója el nem éri a 0-t
fmt.Println("Minden goroutine befejeződött, az eredmények felhasználhatók")

Így a WaitGroup lehetővé teszi a végrehajtás szinkronizálását és garantálja, hogy a vezérlő szál megvárja az összes párhuzamos feladat befejezését.