Sobes.tech
Junior — Middle

Ինչպե՞ս կարելի է երաշխավորել, որ ծրագրում աշխատող բոլոր գորուտինները ավարտվեն:

sobes.tech AI

Պատասխան AI-ից

Go լեզվում չկա ներքին միջոց՝ արտաքնից ուժեղ կերպով ավարտելու goroutine-ները։ Որպեսզի երաշխավորենք, որ բոլոր աշխատող goroutine-ները ավարտվեն, սովորաբար օգտագործվում է sync.WaitGroup սինխրոնիզացիան։

Աշխատանքի սկզբունքը՝

  • Նախքան յուրաքանչյուր goroutine սկսելը, կանչվում է wg.Add(1):
  • Goroutine-ի վերջում կանչվում է wg.Done():
  • Հիմնական ֆունկցիայում կանչվում է wg.Wait(), որը խոչընդոտում է կատարմանը մինչև հաշվիչը չհասնի զրոյի:

Օրինակ՝

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // goroutine-ի աշխատանքը
}()

wg.Wait() // սպասել մինչև բոլոր goroutine-ները ավարտվեն

Այս կերպ, ծրագիրը երաշխավորում է, որ սպասում է բոլոր goroutine-ների ավարտին նախքան շարունակել կամ ավարտել։