Sobes.tech
Junior — Middle

Ինչպե՞ս իրականացնել միաժամանակյա սպասում մի քանի հոսքային առաջադրանքների ավարտին Go ծրագրում։

sobes.tech AI

Պատասխան AI-ից

Go լեզվում սովորաբար օգտագործվում է sync.WaitGroup՝ մի քանի պառլելային առաջադրանքների ավարտը սինխրոն սպասելու համար։ Դա թույլ է տալիս մի քանի goroutine գործարկել և սպասել նրանց ավարտին։

Օրինակ՝

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done() // տեղեկացնում է WaitGroup-ին, որ առաջադրանքը ավարտվել է
    fmt.Printf("Աշխատող %d սկսվեց\n", id)
    // աշխատանքային սիմուլացիա
    // time.Sleep(time.Second)
    fmt.Printf("Աշխատող %d ավարտվեց\n", id)
}

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

    wg.Add(numWorkers) // սահմանում է առաջադրանքների քանակը

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

    wg.Wait() // սպասում է բոլոր goroutine-ների ավարտին
    fmt.Println("Բոլոր աշխատողները ավարտվեցին")
}

Այսպիսով, WaitGroup թույլ է տալիս արդյունավետ սինխրոնիզացնել պառլելային առաջադրանքների կատարմանը։