在Golang中使用goroutine时遇到麻烦

时间:2018-11-15 07:54:59

标签: goroutine

%run "/paths"

当我运行该程序时,它仅打印大约一百个数字。 为什么不打印1000个数字?

但是当我没有注释图片中的代码时,结果就达到了我的期望。问题出在哪里?

1 个答案:

答案 0 :(得分:1)

Goroutines are similar to 'background jobs'

  

主Goroutine应该正在运行,其他任何Goroutine才能运行。如果主Goroutine终止,则该程序将终止,并且不会运行其他Goroutine。

等待“ c”通道上的消息的1000个goroutine在“后台”运行。主线程向通道'c'发送1000条消息,并立即终止。

100个左右的整数输出将不确定,因为您的1000个goroutine中的每一个仅在主线程将1000个整数发送到通道'c'时才能生存。您需要主线程来等待1000个goroutine完成。尝试使用sync.WaitGroup对象:

package main

import (
    "fmt"
    "sync"
    //-"time"
)

func main() {
    wg := sync.WaitGroup{}
    c:=make(chan int)
    for i:=0;i<1000;i++{
        wg.Add(1)
        go func() {
            fmt.Println(<-c)
            wg.Done()
        }()
    }
    for j:=0;j<1000;j++{
        c<-j
        //-time.Sleep(time.Second/100)
    }
    wg.Wait()
}