zoukankan      html  css  js  c++  java
  • 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 , 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)
    	}
    }
    
  • 相关阅读:
    XML 读取器和编写器从URL读取XML
    8月8号 星期五
    080808 晴
    080805
    雨景
    用photoshop批量修改照片(待修改)
    8月7日 晴
    五不
    Android 画渐变的背景
    iOS开发的一些基础知识
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12769679.html
Copyright © 2011-2022 走看看