首页 > 其他 > 详细

使用go协程完成求素数问题

时间:2020-12-20 20:24:58      阅读:34      评论:0      收藏:0      [点我收藏+]

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线程退出");
}

 

使用go协程完成求素数问题

原文:https://www.cnblogs.com/zh718594493/p/14163803.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!