Sobes.tech
Junior — Middle

Go dasturida bir nechta parallel vazifalar tugashini sinxron kutishni qanday amalga oshirasiz?

sobes.tech AI

AIdan javob

Go tilida, bir nechta parallel vazifalarning yakunlanishini sinxron tarzda kutish uchun odatda sync.WaitGroup ishlatiladi. Bu bir nechta goroutinlarni ishga tushirish va ularning yakunlanishini kutishga imkon beradi.

Misol:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done() // WaitGroup ga vazifa tugaganligini bildiradi
    fmt.Printf("Ishchi %d boshladi\n", id)
    // ishni simulyatsiya qilish
    // time.Sleep(time.Second)
    fmt.Printf("Ishchi %d tugadi\n", id)
}

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

    wg.Add(numWorkers) // Vazifa sonini belgilash

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

    wg.Wait() // Barcha goroutinlarning yakunlanishini kutish
    fmt.Println("Barcha ishchilar tugadi")
}

Shu tarzda, WaitGroup parallel vazifalarning bajarilishini samarali tarzda sinxronlashtiradi.