Sobes.tech
Junior — Middle

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

sobes.tech AI

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

Go-ում սովորաբար օգտագործվում է sync.WaitGroup տիպի միջոցով սինխրոնիզացիա՝ բոլոր երեխաների goroutines ավարտված լինելու որոշման համար։

Օրինակ՝

var wg sync.WaitGroup

wg.Add(3) // սպասում ենք 3 goroutine-ի

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // նշում ենք ավարտը
        // goroutine-ի աշխատանքը
        fmt.Println("Goroutine", id, "ավարտվեց")
    }(i)
}

wg.Wait() // կանգնում է, մինչև բոլոր goroutines-ները կանչեն Done()
fmt.Println("Բոլոր goroutines-ները ավարտվեցին")

Այս կերպ, WaitGroup թույլ է տալիս գլխավոր goroutine-ին սպասել բոլոր երեխաների goroutines-ների ավարտին։