Sobes.tech
Junior — Middle

Loyihalaringizda sync.WaitGroup yordamida sinxronizatsiya mexanizmini qoʻlladizmi?

sobes.tech AI

AIdan javob

Ha, Go loyihalarida sync.WaitGroup ko'pincha gorutinalarni sinxronlashtirish uchun ishlatiladi. Bu mexanizm parallel vazifalar guruhining yakunlanishini kutishga imkon beradi.

Ishlash prinsipi:

  • WaitGroup obyekti yaratiladi.
  • Har bir gorutina ishga tushirilishidan oldin Add(1) chaqiriladi, bu hisoblagichni oshiradi.
  • Gorutina ichida ish tugagach, Done() chaqiriladi, bu hisoblagichni kamaytiradi.
  • Asosiy gorutina Wait() chaqiradi, u hisoblagich nolga teng bo'lguncha bloklanadi.

Misol:

var wg sync.WaitGroup

wg.Add(2) // 2 ta gorutina kutamiz

go func() {
    defer wg.Done()
    // birinchi gorutina ishlari
}()

go func() {
    defer wg.Done()
    // ikkinchi gorutina ishlari
}()

wg.Wait() // ikkala gorutina ham tugashini kutamiz

Bu paralel operatsiyalarni muvofiqlashtirish va dastur erta tugashining oldini olish uchun qulay.