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-ҳо ба охир расанд, пеш аз идома ё анҷом додан.