首页 > 试题广场 >

下列代码的输出结果为( &n...

[单选题]
下列代码的输出结果为(      )
package main

import (
 "sync"
)

const N = 10

func main() {
 m := make(map[int]int)

 syncwg := &sync.WaitGroup{}
 syncmu := &sync.Mutex{}
 syncwg.Add(N)
 for i := 0; i < N; i++ {
  go func() {
   defer syncwg.Done()
   syncmu.Lock()
   m[i] = i
   syncmu.Unlock()
  }()
 }
 syncwg.Wait()
 println(len(m))
}
  • 0
  • 1
  • 9
  • 10
这题答案0-9都有可能 for或者range 与协程配合使用时,for 传入给协程的数不确定
func main() {
	m := make(map[int]int)

	syncwg := &sync.WaitGroup{}
	syncmu := &sync.Mutex{}
	syncwg.Add(N)
	for i := 0; i < N; i++ {
		go func(i int) {
			defer syncwg.Done()
			syncmu.Lock()
			m[i] = i
			syncmu.Unlock()
		}(i)
	}
	syncwg.Wait()
	println(len(m))
}
如果给这个匿名函数加传入参数,结果才为10

发表于 2019-11-15 22:15:02 回复(0)