Junior — Middle
Kuidas tagada, et kõik käimas olevad gorutined programmis lõpetatakse?
sobes.tech AI
Vastus AI-lt
Go keeles ei ole sisseehitatud viisi sundida goroutine'i väljastpoolt lõpetama. Kõigi käimasolevate goroutine'ide lõpetamise tagamiseks kasutatakse tavaliselt sünkronisatsiooni sync.WaitGroup abil.
Tööpõhimõte:
- Enne iga goroutine käivitamist kutsutakse
wg.Add(1). - Goroutine lõpus kutsutakse
wg.Done(). - Peafunktsioonis kutsutakse
wg.Wait(), mis blokeerib täitmise kuni loendur jõuab nulli.
Näide:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// goroutine'i töö
}()
wg.Wait() // oodata, kuni kõik goroutine'id on lõpetatud
Selle meetodiga garantii, et programm ootab kõigi goroutine'ide lõpetamist enne jätkamist või lõpetamist.