1. 程式人生 > 實用技巧 >使用go協程完成求素數問題

使用go協程完成求素數問題

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執行緒退出"); }