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() // սպասում ենք, մինչև երկուսը ավարտվեն
Այս մեթոդը օգտակար է պառալելային գործողությունների համակարգման և ծրագրի վաղաժամ ավարտումը կանխելու համար։