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()
}
本文通过Go语言实现了一个简单的线程池并发控制示例。利用通道限制并发数,并结合WaitGroup确保所有任务执行完毕。适用于理解Go语言中并发控制机制。
1114

被折叠的 条评论
为什么被折叠?



