Junior — Middle
Wie implementiert man eine synchrone Wartezeit auf die Beendigung mehrerer paralleler Aufgaben in einem Go-Programm?
sobes.tech KI
Antwort von AI
In Go wird sync.WaitGroup üblicherweise verwendet, um synchron auf den Abschluss mehrerer paralleler Aufgaben zu warten. Es ermöglicht das Starten mehrerer Goroutines und das Warten auf deren Abschluss.
Beispiel:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Informiert das WaitGroup, dass die Aufgabe beendet ist
fmt.Printf("Worker %d gestartet\n", id)
// Arbeit simulieren
// time.Sleep(time.Second)
fmt.Printf("Worker %d beendet\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Anzahl der Aufgaben festlegen
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // Warten auf das Ende aller Goroutines
fmt.Println("Alle Worker beendet")
}
Auf diese Weise ermöglicht WaitGroup eine effiziente Synchronisation der Ausführung paralleler Aufgaben.