菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2710
4

画江湖之 Go 学习篇 【信号量】

原创
05/13 14:22
阅读数 2399

krisji 记录自己学习go的知识点以及工作上的实战,各位小伙伴们赶紧上车咯~ 

 ## go如何通过信号量控制并发量?

看代码

package main

import (
    "fmt"
    "math"
    "sync"
    "time"
)

var wg08 sync.WaitGroup
var chSem chan int

func main() {

    //通过管道定义信号量5个 意思代表只能有五个同时并发
    chSem = make(chan int, 5)
    //起100个任务并发处理
    for i := 0; i < 100; i++ {
        wg08.Add(1)//等待组
        go getSqrt(i)//开辟协程处理
    }

    wg08.Wait()//等待组阻塞主协程
}

func getSqrt(n int) {
    //规定:所有并发任务都必须注册在信号量管道里
    chSem <- n

    fmt.Printf("%d的平方根是%.2f\n", n, math.Sqrt(float64(n)))
    <- time.After(10 * time.Second)//定时器

    //任务结束后从信号量管道注销,给其它腾出空间
    <-chSem
    wg08.Done()
}

看下输出内容 5个 5个的打印

画江湖之go学习篇

go

发表评论

0/200
2710 点赞
4 评论
收藏
为你推荐 换一批