package main import ( "fmt" "sync" "time" ) /* 设计个程序,要求: 1、将1-120000数字存入channel1。 2、1-120000数字中为素数的计算出来并且存入channel2。 3、打印这些素数。 注意:三个任务要求同步进行即开启多协程 */ var wg = new(sync.WaitGroup) //存入1-120000数字的函数 func storeNum(channel1 chan int) { for i := 1; i <= 120000; i++ { channel1 <- i } close(channel1)//每次利用for range遍历channel时,得将channel关闭 wg.Done() } //计算出素数,存入channel2的函数 func calculateNum(channel1, channel2 chan int, channel3 chan bool) { for val := range channel1 { flag := true for i := 2; i < val; i++ { if val%i == 0 { flag = false } } if flag { channel2 <- val } } channel3 <- true wg.Done() } //打印素数的函数 func printNum(channel2 chan int) { for val := range channel2 { fmt.Println(val) } wg.Done() } func main() { start := time.Now().Unix() channel1 := make(chan int, 2000) channel2 := make(chan int, 5000) channel3 := make(chan bool, 6) wg.Add(1) go storeNum(channel1) for i := 1; i <= 6; i++ { wg.Add(1) go calculateNum(channel1, channel2, channel3) } wg.Add(1) go printNum(channel2) wg.Add(1) go func() { for i := 1; i <= 6; i++ { <-channel3 } close(channel2)//每次利用for range遍历channel时,得将channel关闭 wg.Done() }() wg.Wait() end := time.Now().Unix() fmt.Printf("执行时间为%d\n", end-start) }