Sobes.tech
Junior — Middle

Go тилинде WaitGroup түзүмү goroutine'лердин синхрондоштуусу үчүн кандай функцияларды камсыздайт?

sobes.tech AI

AIден жооп

Go тилинде, sync.WaitGroup түзүмү бир нече горутиндерди синхрондоштуруу үчүн колдонулат жана негизги горутин башка горутиндердин аяктоо үчүн күтүүгө мүмкүндүк берет.

WaitGroupтин негизги ыкмалары:

  • Add(delta int) — күтүлүп жаткан горутиндердин санын көбөйтөт же азайтат. Адатта, горутиндер ишке киришерден мурун чакырылат.

  • Done() — санакты 1ге азайтат, горутиндин иши аяктагандан кийин чакырылат.

  • Wait() — санак нөлгө жеткенче ишти токтотот.

Колдонуу мисалы:

var wg sync.WaitGroup

wg.Add(3) // 3 горутин күтүп жатабыз

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // аяктоо белгиленет
        fmt.Println("Goroutine", id)
    }(i)
}

wg.Wait() // бардык горутиндердин аяктоосун күтүп жатабыз
fmt.Println("Бардык горутиндер аяктады")

Ушул жол менен, WaitGroup параллелдик ишти координациялоого жардам берет жана программа эрте бүтпөөгө кепилдик берет.