1.开启4个协程完成求1..n之间有多少个素数
package main import ( "fmt" ) //第一个协程存储数据到管道里面 func putNum(putchan chan int){ for i:=1;i<1000;i++ { putchan <- i; } close(putchan);//关闭管道 } //读出是素数管道 func primNum(puuchan chan int,primchan chan int,exitchan chan bool){ var flag bool; for { num,ok:=<-puuchan;//读出数据 if !ok { break; } flag=true; for i:=2; i<num;i++ { if num % i == 0 { flag = false; break; } } if flag { primchan <- num; } } exitchan <- true; } func main(){ puchan:=make(chan int,2000);//需要找的数字 primchan :=make(chan int ,2000);//存储是素数的数字 exithcan:=make(chan bool,4);//设计退出的管道 go putNum(puchan);//写入数据 for i:=0;i<4;i++{//等待处理结果4个协程 go primNum(puchan,primchan,exithcan);//开启4个协程 } go func(){ for i:=0;i<4;i++{ <-exithcan; } close(primchan);//关闭素数管道 }() for { res,ok := <- primchan; if !ok { break; } fmt.Printf("素数=%d\n",res); } fmt.Println("main线程退出"); }
原文:https://www.cnblogs.com/zh718594493/p/14163803.html