1. 程式人生 > 其它 >go的WaitGroup併發問題,多次執行結果不相等

go的WaitGroup併發問題,多次執行結果不相等

技術標籤:go

我有一個50+的併發,使用了WaitGroup,在goroutine中加了個計數器,100次迴圈這個併發,每次得到的計數器並不總等於50。

func TestMyLoop(t *testing.T) {
	for i := 0; i < 100; i++ {
		myLoop()
	}
}

func myLoop() {
	wg := sync.WaitGroup{}
	y:=0
	for i := 0; i < 50; i++ {
		wg.Add(1)
		go func(wg *sync.WaitGroup, i int,y *int) {
			//log.Printf("i:%d", i)
			*y++
			wg.Done()
		}(&wg, i,&y)
	}
	wg.Wait()
	log.Println(y)
}

結果

為啥,將50改為100,這個差異更大