Rumah >pembangunan bahagian belakang >Golang >Mengapa Kod My Go Menghasilkan 'ralat maut: semua goroutine sedang tidur - kebuntuan!' Ralat dengan penyegerakan.WaitGroup?
Ralat "Semua Goroutine Tidur" Semasa Menggunakan penyegerakan.WaitGroup
Dalam kod anda, anda menghadapi "ralat maut: semua goroutine adalah tidur - kebuntuan!" mesej. Ini berlaku kerana anda menghantar salinan WaitGroup kepada setiap goroutine dan bukannya rujukan kepada yang asal.
Seperti dalam dokumentasi, WaitGroup memerlukan anda menghantar penunjuk kepada pembolehubah dan bukannya pembolehubah itu sendiri. Apabila anda melepasi nilai WaitGroup sebenar, Go membuat salinan, menghasilkan berbilang kejadian WaitGroup dengan kiraan yang berbeza.
Kod yang dikemas kini hendaklah:
import "sync" func doWork(wg *sync.WaitGroup) error { defer wg.Done() // Do some heavy lifting... request URL's or similar return nil } func main() { wg := &sync.WaitGroup{} for i := 0; i < 10; i++ { wg.Add(1) go doWork(wg) } wg.Wait() }
Dengan menghantar penunjuk, semua goroutine rujuk WaitGroup yang sama. Apabila mereka memanggil Selesai(), ia mengurangkan kiraan dalam WaitGroup asal, menghasilkan gelagat yang dijangkakan.
Atas ialah kandungan terperinci Mengapa Kod My Go Menghasilkan 'ralat maut: semua goroutine sedang tidur - kebuntuan!' Ralat dengan penyegerakan.WaitGroup?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!