Intern
Եթե sync.WaitGroup հաշիվը բացասական դառնա ավելացված Done կանչերի պատճառով, քան Add-ը, ինչ կլինի?
sobes.tech AI
Պատասխան AI-ից
Եթե sync.WaitGroup-ի հաշիվը Go-ում բացասական է դառնում, քանի որ Done() կանչումները ավել են, քան Add(), ապա ժամանակի ընթացքում տեղի կունենա panic ( Panic )։
WaitGroup-ը հետևում է սպասվող goroutine-ների քանակին հաշվիչի միջոցով։ Երբ կանչվում է Add(n), հաշվիչը մեծանում է n-ով, իսկ երբ Done() — նվազում է 1-ով։ Եթե հաշվիչը դառնա բացասական, դա համարվում է օգտագործման սխալ։
Սխալի օրինակ՝
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // ավելորդ կանչ, կհանգեցնի panic- ի
Panic-ը տեղի է ունենում հետևյալ հաղորդագրությամբ՝
panic: sync: negative WaitGroup counter
Հետևաբար, կարևոր է խստորեն պահպանել Add և Done միջև հավասարակշռությունը՝ այս սխալը կանխելու համար։