大家来解惑--这段代码有啥问题?

javasgl · · 2876 次点击
这个 `curGNum`的没有自增操作么?如果要在`goroutinue`里面对`curGNum`自增操作的话,需要对这个进行加锁吧。 想通了,通过` sync.WaitGroup `和 `channel `实现了控制并发数,代码如下: ``` package main import ( "fmt" "sync" "time" ) func main() { wg := &sync.WaitGroup{} limiter := make(chan bool, 10) for i := 0; i < 100; i++ { wg.Add(1) limiter <- true go download(i, limiter, wg) } wg.Wait() } func download(index int, limiter chan bool, wg *sync.WaitGroup) { defer wg.Done() fmt.Println("start to download :", index) time.Sleep(1 * time.Second) <-limiter } ```
#9
更多评论
polaris
社区,需要你我一同完善!
问题的关键在于 main goroutine 提前退出了。 不论是那种代码,最好在 main 函数最后等待所有 goroutine 执行完成,方法很多了,可以 Sleep,可以 sync.WaitGroup 等等。
#1
但是我只仅仅调换了下 sleep 和 print 语句的先后顺序,就能打印到 99 了。
#2