func main() {
var wg sync.WaitGroup
sem := make(chan struct{}, 2) // 最多允许2个并发同时执行
taskNum := 10
for i := 0; i < taskNum; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // 获取信号
defer func() { <-sem }() // 释放信号
// do something for task
time.Sleep(time.Second * 2)
fmt.Println(id, time.Now())
}(i)
}
wg.Wait()
}
golang - 用通道实现信号量,控制并发个数
猜你喜欢
转载自blog.csdn.net/xuezhangjun0121/article/details/132711271
今日推荐
周排行