美文网首页
golang 并发写map修复

golang 并发写map修复

作者: yandaxin | 来源:发表于2023-10-27 23:20 被阅读0次

fatal error: concurrent map writes:当其中有两个goroutine 尝试同时写入相同的key 值时,就会引发 concurrent map writes 错误,为了解决该问题,可以使用Go 中的并发安全的结构体 sync.Map,或者使用互斥锁sync.Mutex以及concurrentmap 来保护map 的并发访问

https://blog.csdn.net/EDI451553616/article/details/130400507

teamValidMap := new(sync.Map)
    // 获取有效的队伍
    var wg sync.WaitGroup
    for _, teamItem := range teamList {
        wg.Add(1)

        tid := teamItem.TeamId
        teamTmp := teamItem
        go func(tid int64) {
            isV := IsTeamValid(ctx, teamTmp)
            teamValidMap.Store(tid, isV)
            defer wg.Done()
        }(tid)
    }
    wg.Wait()

    // 如果有多个队伍 选最后发起的有效的那个
    var team *InvitationTeam
    for _, teamItem := range teamList {
        isV, _ := teamValidMap.Load(teamItem.TeamId)
        if !isV.(bool) {
            continue
        }

        if nil == team {
            team = teamItem
            continue
        }

        if teamItem.InitiateTime.Unix() > team.InitiateTime.Unix() {
            team = teamItem
        }
    }

相关文章

  • golang语言map的并发和排序

    golang语言map的并发和排序 map的并发问题 golang缺省的map不是thread safe的,如果存...

  • Go sync.Map

    map并发读线程安全,并发读写线程不安全。 sync.Map 读写分离 空间换时间 Map Golang1.6之前...

  • (九)golang sync map 源码分析

    golang中的map是不支持并发操作的,golang推荐用户直接用读写锁对map进行保护,也有第三方类库使用分段...

  • 并发map --- sync map分析

    [TOC] 本文基于1.10源码分析如之前的文章可以看到,golang中的map是不支持并发操作的,golang推...

  • Golang之Map源码解析

    在Golang情景中,Map主要分为两种:sync.Map和内置Map,两者主要区别是内置Map不支持并发读写,s...

  • golang并发map记录

    1.普通map+mutex,实现map的并发安全读写 2.sync.Map 3.第三方并发安全map库

  • Go map底层实现

    golang map源码详解Golang map 如何进行删除操作?

  • Golang的map并发安全

    已知多个goroutine同时读写Map会出问题如下代码会抛出异常 运行结果 由此可见golang中的map并不是...

  • gobox中的shardmap

    今天来说下gobox中的shardmap。 golang中的map使用简单,但并发写入时,如果不加锁,会导致pan...

  • map golang

    原文链接:map-GOLANG

网友评论

      本文标题:golang 并发写map修复

      本文链接:https://www.haomeiwen.com/subject/ezppidtx.html