使用go協程完成求素數問題
阿新 • • 發佈:2020-12-20
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執行緒退出"); }