要求:
要求统计1-8000的数组当中哪些是素数?现在我们使用goroutine和channel知识完成
package main import ( "fmt" "time" ) func putNum(intchan chan int) { for i := 1; i <= 8000; i++ { intchan <- i } close(intchan) } func primeNum(intchan chan int, primechan chan int, exitchan chan bool) { //使用for循环取出数据进行判断 var flag bool //标记符 for { flag = true //假设是素数 time.Sleep(time.Millisecond * 10) num, ok := <-intchan if !ok { break } for j := 2; j < num; j++ { if num%j == 0 { //说明num不是素数 flag = false break } } if flag { //是素数就把数据放入到存放素数的管道 primechan <- num } } fmt.Println("有一个primeNum 协程因为取不到数据退出") //现在还不能关闭管道,因为要开启四个协程同时取数据 exitchan <- true } func main() { intchan := make(chan int, 1000) primechan := make(chan int, 2000) exitchan := make(chan bool, 4) go putNum(intchan) //同时开启四个协程 for i := 0; i < 4; i++ { go primeNum(intchan, primechan, exitchan) } go func() { for i := 0; i < 4; i++ { <-exitchan } close(primechan) }() for { //使用for循环取出primechan中的数据 val, ok := <-primechan if !ok { break } fmt.Printf("素数=%v\n", val) } fmt.Println("main down") }