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

anko · · 2158 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

### 如题,白白浪费我几天时间,偶发的并发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

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