标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。