2014-09-20 68 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