Sobes.tech
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'pincha defer bilan).
  • 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")
}