Go语言协程并发---管道信号量应用
Posted xiaoqiang1_1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言协程并发---管道信号量应用相关的知识,希望对你有一定的参考价值。
package main import ( "fmt" "math" "strconv" "time" ) /* ·100条协程并发求1-10000平方根 ·最大并发数控制在5 ·管道实现 */ func GetSqrt(name string, n int, chSem chan string) { //想执行,先注册 //能写入就执行,写不进去就阻塞到能写入为止 chSem <- name ret := math.Sqrt(float64(n)) time.Sleep(time.Second) fmt.Printf("%d的平方根是%.2f\n",n , ret) //任务执行完毕,从信号量控制管道注销自己,以便为其他协程腾出空间 <- chSem } func main() { /* 并发数(信号量)控制管道 凡要并发执行的协程必须先将协程名称注册到该管道 */ chSem := make(chan string, 5) for i := 0; i < 100; i++ { go GetSqrt("协程"+strconv.Itoa(i), i, chSem) } for true { time.Sleep(time.Second) } }
以上是关于Go语言协程并发---管道信号量应用的主要内容,如果未能解决你的问题,请参考以下文章