Junior
Go'da WaitGroup nima uchun ishlatiladi?
sobes.tech AI
AIdan javob
WaitGroup bir yoki bir nechta goroutinlarning ishini sinxronlashtirish uchun ishlatiladi. Bu asosiy goroutine'ga boshqa yaratilgan goroutinlarning bajarilishini kutishga imkon beradi. Bu hisoblagichdan iborat bo'lib, u goroutin yaratilganda oshiriladi va tugagach kamaytiriladi.
Asosiy metodlar:
Add(delta int): Goroutinlar hisoblagichini oshiradi yoki kamaytiradi.Done(): Hisoblagichni 1 ga kamaytiradi. Odatda goroutine oxirida chaqiriladi (ko'pinchadeferbilan).Wait(): Hisoblagich nolga teng bo'lguncha bajarilishni bloklaydi.
Foydalanish misoli:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Goroutine tugagach hisoblagichni kamaytiradi
fmt.Printf("Goroutine %d boshlanmoqda\n", id)
// Ishni simulyatsiya qilish
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d tugadi\n", id)
}
func main() {
var wg sync.WaitGroup // WaitGroup yaratamiz
for i := 1; i <= 5; i++ {
wg.Add(1) // Har bir goroutine uchun hisoblagichni oshiramiz
go worker(i, &wg) // Goroutine'ni ishga tushiramiz, WaitGroup'ga ko'rsatkich o'tkazamiz
}
wg.Wait() // Hisoblagich 0 bo'lguncha kutamiz (barcha goroutinlar tugaydi)
fmt.Println("Barcha goroutinlar tugadi")
}