Junior — Middle
Dasturda ishga tushirilgan barcha goroutinlarni qanday qilib ishonch bilan yakunlash mumkin?
sobes.tech AI
AIdan javob
Go tilida tashqaridan majburan goroutine'ni to'xtatishning ichki usuli yo'q. Barcha ishga tushirilgan goroutine'larning tugashini kafolatlash uchun odatda sync.WaitGroup yordamida sinxronizatsiya qilinadi.
Ishlash prinsipi:
- Har bir goroutine boshlashdan oldin
wg.Add(1)chaqiriladi. - Goroutine ichida, oxirida,
wg.Done()chaqiriladi. - Asosiy funksiyada
wg.Wait()chaqiriladi, bu bajarilishni bloklaydi, to'g'ri son 0 ga teng bo'lguncha.
Misol:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// goroutine ishlashi
}()
wg.Wait() // barcha goroutine'larning tugashini kutish
Shu tarzda, dastur barcha goroutine'lar tugashini kafolatlab, davom etadi yoki yakunlanadi.