我有下一个代码func main() { var counter int m := &sync.Mutex{} for i := 0; i < 1000; i++ { go func(m *sync.Mutex) { m.Lock() counter++ m.Unlock() }(m) } fmt.Println(counter)}但是我不明白为什么计数器不等于1000?我正在使用互斥锁进行锁定,我正在等待程序等待解锁
1 回答
萧十郎
TA贡献1815条经验 获得超13个赞
您正在所有 goroutines 完成之前打印结果。使用等待组等待它们:
func main() {
var counter int
m := &sync.Mutex{}
var wg sync.WaitGroup
wg.Add(1000)
for i := 0; i < 1000; i++ {
go func(m *sync.Mutex) {
m.Lock()
counter++
m.Unlock()
wg.Done()
}(m)
}
wg.Wait()
fmt.Println(counter)
}
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报
0/150
提交
取消