Sobes.tech
Junior — Middle

Ako implementovať synchronné čakanie na dokončenie viacerých paralelných úloh v programe v Go?

sobes.tech AI

Odpoveď od AI

V jazyku Go sa sa obično za sinhrono čakanje na dokončanje več paralelnih nalogov uporablja sync.WaitGroup. To omogoča zagon več gorutin in čakanje na njihov zaključek.

Primer:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done() // Obvesti WaitGroup, da je naloga zaključena
    fmt.Printf("Delavec %d je začel\n", id)
    // simulacija dela
    // time.Sleep(time.Second)
    fmt.Printf("Delavec %d je končal\n", id)
}

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

    wg.Add(numWorkers) // Nastavi število nalog

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

    wg.Wait() // Čaka na zaključek vseh gorutin
    fmt.Println("Vsi delavci so zaključili")
}

Na ta način WaitGroup omogoča učinkovito sinhronizacijo izvajanja paralelnih nalogov.