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-ների ավարտին նախքան շարունակել կամ ավարտել։