Junior — Middle
Siz Go'da WaitGroup yordamida bir nechta gorutinlarning yakunlanishini kutish mexanizmi qanday ishlashini tushuntirib bera olasizmi?
sobes.tech AI
AIdan javob
Go'da, bir nechta goroutinening yakunlanishini kutish uchun sync.WaitGroup turi ishlatiladi. Bu, bir nechta goroutinlarga "obuna bo'lish" va ularning hammasi tugaguncha bajarilishini bloklash imkonini beradi.
WaitGroup ning asosiy metodlari:
- Add(n int) — hisoblagichni n ga oshiradi, odatda goroutinlarni ishga tushirishdan oldin chaqiriladi.
- Done() — hisoblagichni 1 ga kamaytiradi, har bir goroutinning oxirida chaqiriladi.
- Wait() — hisoblagich 0 bo'lgunga qadar bajarilishni bloklaydi.
Foydalanish misoli:
var wg sync.WaitGroup
wg.Add(3) // 3 ta goroutine kutamiz
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // tugashini signal qilamiz
fmt.Printf("Goroutine %d ishga tushdi\n", id)
// biron bir ish
}(i)
}
wg.Wait() // barcha goroutinlar tugashini kutamiz
fmt.Println("Barcha goroutinlar tugadi")