同时添加和读取具有通道的地图

我正在尝试在 Go 中实现并发安全映射。


我已经使用下面的互斥体完成了它。首先,这是使用互斥锁的好方法吗?或者我应该以不同的方式使用同步包?其次,我怎么能做同样的事情,而不是使用通道呢?


func main(){

    var wg sync.WaitGroup

    

    m := make(map[int]int)


    var mu sync.Mutex

    wg.Add(1)

    wg.Add(1)

    go func(){

        defer wg.Done()

        mu.Lock()

        m[1] = 1

        mu.Unlock()

    }()

    go func(){

        defer wg.Done()

        defer mu.Unlock()

        for {

            time.Sleep(1 * time.Second)

            mu.Lock()

            if a, ok := m[1]; ok {

                fmt.Println(a)

                break

            }

        }

    }()

    wg.Wait()

}


幕布斯7119047
浏览 97回答 1
1回答

墨色风雨

对于所有评论者都认为这是一个人为的例子:否则你如何简洁地演示同时访问Go中的地图?鉴于其教育背景,这是一个完全有效的问题,并且很好地展示了所讨论的问题。现在,回答:是的,这似乎是将互斥体与地图一起使用的完美方式。我更喜欢随机等待,以便更准确地模拟现实生活,但这对我来说似乎是合理的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go