下面一段代码 len(m) 不一定会打印为 10,为什么?。如果想要 len(m) 打印为 10,应该怎么修改代码?

func main() {
const N = 10
m := make(map[int]int)
wg := &sync.WaitGroup{}
mu := &sync.Mutex{}
wg.Add(N)
for i := 0; i < N; i++ {
go func() {
defer wg.Done()
mu.Lock()
m[i] = i
mu.Unlock()
}()
}
wg.Wait()
println(len(m))
}

len(m)0-9都有可能 for或者range 与协程配合使用时,for 传入给协程的数不确定。给这个匿名函数加传入参数,结果才为10。

func main() {
const N = 10
m := make(map[int]int)
wg := &sync.WaitGroup{}
mu := &sync.Mutex{}
wg.Add(N)
for i := 0; i < N; i++ {
go func(i int) {
defer wg.Done()
mu.Lock()
m[i] = i
mu.Unlock()
}(i)
}
wg.Wait()
println(len(m))
}

最新文章

  1. SSIS同步多个数据库
  2. Java 邮件发送
  3. 隐藏UITableView多余的分割线
  4. NoSQL:从关系型数据库到非关系型数据库
  5. 2010山东省第一届ACM程序设计竞赛
  6. Binary Tree Level Order Traversal II 解题思路
  7. Java学习疑惑(8)----可视化编程, 对Java中事件驱动模型的理解
  8. 你好 JSONP !!!!
  9. Java的语言特点详解
  10. maven generating project in batch mode hang
  11. SAP MM A工厂下的PR可以转成B工厂下的PO?
  12. Chapter 5 : Control Structures 2 : Repetition
  13. python之psutil模块(获取系统性能数据)
  14. TensorFlow学习---tf.nn.dropout防止过拟合
  15. 避免代码merge后无法构建发布(GItlabCI + Jenkins)
  16. 进程间通过intent传递数据失败
  17. jQuery使用scrollTop获取div标签的滚动条已滚动高度(jQuery版本1.6+时,用prop()方法代替attr()方法)
  18. [leetcode greedy]134. Gas Station
  19. android adapter的性能小结
  20. Java之POI的excel导入导出

热门文章

  1. Logarithmic transformation|Data transfer|MASS|Box-Cox
  2. php配置memcached的扩展。
  3. 吴裕雄--天生自然python学习笔记:python爬虫与网页分析
  4. [Python] Advanced features
  5. Java并发编程入门与高并发面试(三):线程安全性-原子性-CAS(CAS的ABA问题)
  6. &lt;NOIP2005提高T2&gt;过河の思路
  7. 将js进行到底:node学习9
  8. windows 下 基于express搭建 https协议的网站
  9. 爬虫入门-使用python写简单爬虫
  10. Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件)