Sobes.tech
Junior — Middle

Դու՞ք ձեր նախագծերում sync.WaitGroup-ով սինխրոնիզացիայի մեխանիզմը կիրառե՞լ եք։

sobes.tech AI

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

Այո, Go նախագծերում հաճախ օգտագործվում է sync.WaitGroup՝ գորուտինների սինխրոնիզացման համար: Այս մեխանիզմը թույլ է տալիս սպասել մի խմբի պառալելային առաջադրանքների ավարտին՝ նախքան շարունակելը:

Աշխատանքի սկզբունքը՝

  • Ստեղծվում է WaitGroup օբյեկտ:
  • Յուրաքանչյուր գորուտին սկսելուց առաջ կանչվում է Add(1), որպեսզի ավելացվի հաշվիչը:
  • Գորուտինի ներսում, աշխատանքը ավարտելուց հետո, կանչվում է Done(), որը նվազեցնում է հաշվիչը:
  • Մեծ գորուտինը կանչում է Wait(), որը բլոկվում է, մինչև հաշվիչը հասնի զրոյի:

Օրինակ՝

var wg sync.WaitGroup

wg.Add(2) // սպասում ենք 2 գորուտին

go func() {
    defer wg.Done()
    // առաջին գորուտինի աշխատանքը
}()

go func() {
    defer wg.Done()
    // երկրորդ գորուտինի աշխատանքը
}()

wg.Wait() // սպասում ենք, մինչև երկուսը ավարտվեն

Այս մեթոդը օգտակար է պառալելային գործողությունների համակարգման և ծրագրի վաղաժամ ավարտումը կանխելու համար։