2014-09-20 70 views
1

为什么在那个脚本http://play.golang.org/p/Q5VMfVB67- goroutine淋浴不起作用?[golang] 2 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 
    } 
} 

回答

2

您的主要功能退出方式之前,goroutines有机会完成自己的工作。

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

在你的情况,你需要等待够程shower()结束:传递wg *sync.WaitGroup例如,对于shower()信号wg.Done()当它结束处理。

+0

感谢您的回复 – mackristof 2014-09-20 12:51:23