登录
首页 >  Golang >  Go问答

一个关于 sync.Mutex 锁不起作用的问题

来源:SegmentFault

时间:2023-01-19 21:29:56 464浏览 收藏

本篇文章给大家分享《一个关于 sync.Mutex 锁不起作用的问题》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

最近在学 go,使用 sync.Mutex 和 sync.WaitGroup 写了个小例子,没想到翻车了,硬是没搞懂,希望大神指点一下,下面的代码哪里出问题了,谢谢,感激涕零。

package main

import (
    "fmt"
    "sync"
    "time"
)

/**
这个例子主要演示 sync 锁的用法,用 1000 个协程对一个变量加 1000,每个协程 +1,看最终的结果
*/

func main() {
    //这个方法使用了 sync 锁和 sync Wait ,保证了同一时刻只有一个协程对同一个变量操作并且等待所有操作结束才输出最终结果
    hasLockAndWait()
}

func hasLockAndWait() {
    var a = 0
    var wg sync.WaitGroup

    for i := 0; i 

我希望最终的值为 1000,但是结果竟然是随机的,临表涕零。

正确答案

var locker sync.Mutex

移动到 for 上面

或者使用

atomic.AddInt64()

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《一个关于 sync.Mutex 锁不起作用的问题》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表