Junior — Middle
Եթե wg.Add-ի կանչերի թիվը չի համապատասխանում գործարկվող goroutine-ների թվին, ինչ հետևանքներ կլինեն?
sobes.tech AI
Պատասխան AI-ից
Go լեզվում, sync.WaitGroup օգտագործվում է մի շարք goroutine-ների ավարտը սպասելու համար: Մեթոդը wg.Add(n) ավելացնում է հաշվիչը n-ով, իսկ wg.Done() նվազեցնում է այն 1-ով: Եթե wg.Add կանչերի թիվը չի համապատասխանում գործարկված goroutine-ների թվին (այսինքն, wg.Done կանչերին), ապա՝
- Եթե
wg.Addփոքր է, քանwg.Done, ապաwg.Done-ի կանչի ժամանակ հաշվիչը կարող է դառնալ բացասական, ինչը կհանգեցնի ռնտամային Panic- ի: - Եթե
wg.Addմեծ է, քանwg.Done, ապաwg.Wait()-ը հավերժ կլոկավորի, քանի որ հաշվիչը չի հասնի զրոյին — սա հանգեցնում է deadlock-ի:
Ահա թե ինչու, կարևոր է, որ wg.Add-ը ճիշտ թվով կանչվի goroutine-ների գործարկումից առաջ և wg.Done-ը կանչվի ճիշտ այնքան անգամ, որքան ավելացվել է: