Sobes.tech
Junior — Middle

Оё имкон дорад, ки дар вақти иҷрои барнома дар Go шумораи интизорон дар гурӯҳи WaitGroup тағир дода шавад?

sobes.tech AI

Ҷавоб аз AI

Дар Го, шумораи интизорони goroutine дар sync.WaitGroup метавонад дар вақти иҷрои барнома бо истифода аз усулҳои Add, Done ва Wait тағйир дода шавад.

  • Метод Add(n int) шумораи интизорони goroutine-ҳоро бо n зиёд ё кам мекунад. Он метавонад чанд маротиба даъват шавад, то шумораи интизориро динамикӣ тағйир диҳад.
  • Метод Done() баробар ба Add(-1) аст ва шумораи интизориро кам мекунад.
  • Метод Wait() иҷрои барномаро бозмедорад, то ки шумораи интизорӣ ба сифр расад.

Маҳз: агар шумораи интизорӣ аллакай ба сифр баробар бошад, ба Add бо арзиши манфӣ даъват накунед, вагарна паника ба вуҷуд меояд.

Масалан:

var wg sync.WaitGroup

wg.Add(2) // интизорем 2 goroutine

go func() {
    defer wg.Done()
    // кор 1
}()

go func() {
    defer wg.Done()
    // кор 2
}()

// Дар раванди иҷро, метавон интизориро иловагӣ илова кард
wg.Add(1)
go func() {
    defer wg.Done()
    // кори иловагӣ
}()

wg.Wait() // интизорем, ки ҳама анҷом ёбанд

Бинобар ин, шумораи интизорони дар WaitGroup метавонад динамикӣ тағйир ёбад, ба шарте, ки даъватҳои дуруст ба Add ва Done иҷро шаванд.