下面一段代碼 len(m)
不一定會(huì)打印為 10,為什么硬纤?解滓。如果想要 len(m)
打印為 10,應(yīng)該怎么修改代碼筝家?
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 與協(xié)程配合使用時(shí)伐蒂,for 傳入給協(xié)程的數(shù)不確定。給這個(gè)匿名函數(shù)加傳入?yún)?shù)肛鹏,結(jié)果才為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))
}