ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

channel&&goroutine案例练习

2022-01-19 13:33:02  阅读:144  来源: 互联网

标签:int fmt goroutine chan exitChan && resChan channel numChan


 

package main

import(

    "fmt"

)

func writeNum(numChan chan int){

    for i := 1; i <= 2000; i++ {

        numChan<- i

    }

    close(numChan)

}

func readNum(numChan chan int,resChan chan int,exitChan chan bool) {

    res := 0

    for{

        //n,ok := <-numChan

        n := <-numChan

        if len(numChan) == 0{

            break

        }

        fmt.Printf("读取到的数据=%v\n", n)

        for i := 1; i <= n; i++ {

            res += i    

        }

        resChan<- res

    }

    fmt.Println("协程工作完成!!!")

    exitChan<- true

    close(resChan)

}

func main() {

    resChan := make(chan int,2000)

    numChan := make(chan int,2000)

    exitChan := make(chan bool,8)

    go writeNum(numChan)

    for i := 1; i <= 8; i++ {

        go readNum(numChan,resChan,exitChan)

    }

    for{

        if len(exitChan) == 8{

            fmt.Println("主线程即将结束")

            close(exitChan)

            break

        }

    }

   

    i := 1

    for v := range resChan {

        fmt.Printf("res[%v] = %v\n",i,v)

        i++

    }

}

标签:int,fmt,goroutine,chan,exitChan,&&,resChan,channel,numChan
来源: https://blog.csdn.net/weixin_47450271/article/details/122578837

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有