为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 为什么结果不等于 1000?

Golang 为什么结果不等于 1000?

Go
MYYA 2022-08-24 11:31:49
我有下一个代码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)

}


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信