Sobes.tech
Junior — Middle

Hoe implementeer je een synchrone wachttijd voor het voltooien van meerdere parallelle taken in een Go-programma?

sobes.tech AI

Antwoord van AI

In Go wordt sync.WaitGroup gewoonlijk gebruikt om synchroon te wachten op de voltooiing van meerdere parallelle taken. Het stelt je in staat om meerdere goroutines te starten en te wachten tot ze klaar zijn.

Voorbeeld:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done() // Informeer de WaitGroup dat de taak is voltooid
    fmt.Printf("Werker %d gestart\n", id)
    // simulatie van werk
    // time.Sleep(time.Second)
    fmt.Printf("Werker %d voltooid\n", id)
}

func main() {
    var wg sync.WaitGroup
    numWorkers := 3

    wg.Add(numWorkers) // Stel het aantal taken in

    for i := 1; i <= numWorkers; i++ {
        go worker(i, &wg)
    }

    wg.Wait() // Wacht tot alle goroutines klaar zijn
    fmt.Println("Alle werkers klaar")
}

Op deze manier maakt WaitGroup het mogelijk om de uitvoering van parallelle taken efficiënt te synchroniseren.