package main
import (
"fmt"
"sync"
"time"
)
var MAX = 5
var limitChan = make(chan bool, MAX)
var wg = sync.WaitGroup{}
//模拟线程
func thread(no int) {
//主线程等待+1
wg.Add(1)
fmt.Println("this thread no is ", no)
//等待3秒,模拟线程执行
time.Sleep(3*time.Second)
//从管道取出一个值,腾出一个空间,解除管道写入的阻塞
<-limitChan
//主线程等待-1
wg.Done()
}
func main() {
for i:=0; i<10; i++{
//管道内数量达到MAX时,管道满了,新插入阻塞等待
limitChan <- true
go thread(i)
}
//wg为0,所有线程执行完毕,释放
wg.Wait()
}