golang的sync.WaitGroup使用示例
2024-10-05 22:56:08
下面一段代码 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))
}
最新文章
- SSIS同步多个数据库
- Java 邮件发送
- 隐藏UITableView多余的分割线
- NoSQL:从关系型数据库到非关系型数据库
- 2010山东省第一届ACM程序设计竞赛
- Binary Tree Level Order Traversal II 解题思路
- Java学习疑惑(8)----可视化编程, 对Java中事件驱动模型的理解
- 你好 JSONP !!!!
- Java的语言特点详解
- maven generating project in batch mode hang
- SAP MM A工厂下的PR可以转成B工厂下的PO?
- Chapter 5 : Control Structures 2 : Repetition
- python之psutil模块(获取系统性能数据)
- TensorFlow学习---tf.nn.dropout防止过拟合
- 避免代码merge后无法构建发布(GItlabCI + Jenkins)
- 进程间通过intent传递数据失败
- jQuery使用scrollTop获取div标签的滚动条已滚动高度(jQuery版本1.6+时,用prop()方法代替attr()方法)
- [leetcode greedy]134. Gas Station
- android adapter的性能小结
- Java之POI的excel导入导出
热门文章
- Logarithmic transformation|Data transfer|MASS|Box-Cox
- php配置memcached的扩展。
- 吴裕雄--天生自然python学习笔记:python爬虫与网页分析
- [Python] Advanced features
- Java并发编程入门与高并发面试(三):线程安全性-原子性-CAS(CAS的ABA问题)
- <;NOIP2005提高T2>;过河の思路
- 将js进行到底:node学习9
- windows 下 基于express搭建 https协议的网站
- 爬虫入门-使用python写简单爬虫
- Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件)