Sobes.tech
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-ը կանչվի ճիշտ այնքան անգամ, որքան ավելացվել է: