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