测试后expvar.Map :加锁的map : sync.map = 0.75 : 1 : 3

anko · 2020-03-25 03:23:55 · 2286 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2020-03-25 03:23:55 的文章,其中的信息可能已经有所发展或是发生改变。

如题,白白浪费我几天时间,偶发的并发bug不少,看我上篇文章就出现了各种bug,就不说了,现在来说个一定会出现的bug,

下面的代码在1.14.1版本是会报错的,结果不为1,但是我卸载后重新安装1.13.9之后就可以正常执行了!当然也可能是我的电脑原因,求大伙验证!

package main

import (
    "fmt"
    "sync"
)

var wg sync.WaitGroup

func main() {
    var m sync.Map

    for i := 0; i < 65536; i++ {
        m.Store(1, 1)
    }
    wg.Add(2)
    go Add(m)
    go sub(m)

    wg.Wait()
    fmt.Println(m.Load(1))
}
func Add(m sync.Map) {
    for i := 0; i < 10000; i++ {
        value, _ := m.Load(1)
        v := value.(int)
        v += 1
        m.Store(1, v)
    }
    wg.Done()
}

func sub(m sync.Map) {
    for i := 0; i < 10000; i++ {
        value, _ := m.Load(1)
        v := value.(int)
        v -= 1
        m.Store(1, v)
    }
    wg.Done()
}

不出意外的话,上面的额结果不会绝对是1 !!!大伙可以试试!我就不去PR了!

似乎1.13.9也会出现,可能真是我的电脑环境问题了!


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2286 次点击  ∙  1 赞  
加入收藏 微博
上一篇:golang堆排序
下一篇:go map 学习
43 回复  |  直到 2020-03-26 18:01:40
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传