Sobes.tech
Junior — Middle

Kaip įgyvendinti sinchroninį kelių paralelinių užduočių užbaigimo laukimą Go programoje?

sobes.tech AI

Atsakymas iš AI

Go kalboje dažniausiai naudojamas sync.WaitGroup sinchroniniam kelių paralelinių užduočių laukimui. Tai leidžia paleisti kelias gorutinas ir laukti jų užbaigimo.

Pavyzdys:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done() // Informuoja WaitGroup, kad užduotis baigta
    fmt.Printf("Darbininkas %d pradėjo\n", id)
    // darbo imitacija
    // time.Sleep(time.Second)
    fmt.Printf("Darbininkas %d baigė\n", id)
}

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

    wg.Add(numWorkers) // Nustato užduočių skaičių

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

    wg.Wait() // Laukia, kol visi gorutinai baigsis
    fmt.Println("Visi darbininkai baigėsi")
}

Taip WaitGroup leidžia efektyviai sinchronizuoti paralelinių užduočių vykdymą.