登录
首页 >  Golang >  Go问答

Golang中goroutine的使用问题解决

来源:stackoverflow

时间:2024-03-11 20:45:27 412浏览 收藏

本篇文章向大家介绍《Golang中goroutine的使用问题解决》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

package main

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

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

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

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


解决方案


Goroutines are similar to 'background jobs'

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

大约 100 个整数输出将是不确定的,因为只要主线程将 1000 个整数发送到通道“c”,您的 1000 个 goroutine 中的每一个都会存活。你需要主线程等待 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()
}

好了,本文到此结束,带大家了解了《Golang中goroutine的使用问题解决》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>