2 回答

TA貢獻1827條經驗 獲得超8個贊
正如評論中指出的那樣。sum應使用sync.Mutex, 更改前鎖定sum和解鎖后進行保護。如下所示修改后的代碼將打印出 2500。
package main
import (
"fmt"
"sync"
"time"
)
var iterate = 50
var sum = 0
func main() {
m := sync.Mutex{}
timeStart := time.Now()
var wg sync.WaitGroup
for i := 0; i < iterate; i++ {
for i2 := 0; i2 < iterate; i2++ {
wg.Add(1)
go func() {
defer wg.Done()
m.Lock()
sum++
m.Unlock()
time.Sleep(5 * time.Millisecond)
}()
}
}
wg.Wait()
timeEnd := time.Now().Sub(timeStart)
fmt.Println(timeEnd, sum)
}
- 2 回答
- 0 關注
- 113 瀏覽
添加回答
舉報