Sobes.tech
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.