【问题标题】:[Golang]communication between 2 goroutine[Golang]2个goroutine之间的通信
【发布时间】:2014-11-14 19:08:03
【问题描述】:

为什么在那个脚本中http://play.golang.org/p/Q5VMfVB67- goroutine 淋浴不起作用?

package main

import "fmt"

func main() {
    ch := make(chan int)
    go producer(ch)
    go shower(ch)
    for i := 0; i < 10; i++ {
        fmt.Printf("main: %d\n", i)
    }
}
func shower(c chan int) {
    for {
        j := <-c
        fmt.Printf("worker: %d\n", j)
    }
}
func producer(c chan int) {
    for i := 0; i < 10; i++ {
        c <- i
    }
}

【问题讨论】:

    标签: go channel goroutine


    【解决方案1】:

    在 goroutine 有机会完成自己的工作之前,您的 main 函数退出方式。

    在结束main()(停止所有程序)之前,您需要等待它们完成,例如sync.WaitGroup,如“Wait for the termination of n goroutines”中所示。

    在您的情况下,您需要等待 goroutine shower() 结束:传递一个 wg *sync.WaitGroup 实例,让 shower() 在完成处理时向 wg.Done() 发出信号。

    【讨论】:

      猜你喜欢
      • 2019-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多