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.