Sobes.tech
Middle+

Борои бештар дар бораи WaitGroup бигӯ: чӣ гуна кор мекунад, Add, Done, Wait чӣ мекунанд?

sobes.tech AI

Ҷавоб аз AI

Вақтгрупп дар Го барои интизор шудан ба анҷоми гурӯҳи горутинҳо истифода мешавад.

  • Add(n int) — ҳисобиро ба n меорад, одатан пеш аз оғоз кардани горутинҳо даъват мешавад.
  • Done() — ҳисобиро кам мекунад ба 1, дар дохили горутин пас аз анҷоми кор даъват мешавад.
  • Wait() — иҷроиро бозмедорад то ҳисобчик ба сифр расад, яъне то ҳама горутинҳо Done-ро даъват кунанд.

Масалан:

var wg sync.WaitGroup
wg.Add(3) // интизор ҳастем 3 горутин

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done()
        fmt.Println("Горутин", id, "тамом шуд")
    }(i)
}

wg.Wait() // интизор ҳастем, то ҳама горутинҳо тамом шаванд
fmt.Println("Ҳамаи горутинҳо тамом шуданд")

Инчунин, Вақтгрупп кӯмак мекунад, ки вазифаҳои параллелиро ҳамоҳанг созад ва интизор шавад, ки онҳо ба анҷом расанд.