diff --git a/waitgroup/example2/main.go b/waitgroup/example2/main.go new file mode 100644 index 0000000..24c3a6e --- /dev/null +++ b/waitgroup/example2/main.go @@ -0,0 +1,35 @@ +package main + +import ( + "fmt" + "strconv" + "sync" + "time" +) + +/* +限制并发数量的用法 +*/ +func main() { + wg := sync.WaitGroup{} + // 最多允许的并发数量 + limit := make(chan struct{}, 20) + for i := 0; i < 100; i++ { + wg.Add(1) + limit <- struct{}{} + go func(num int) { + defer func() { + <-limit + wg.Done() + }() + dosth(num) + }(i) + } + wg.Wait() +} + +func dosth(i int) { + fmt.Println("do sth-->", strconv.Itoa(i)) + // 模拟耗时1s + time.Sleep(time.Second) +} diff --git a/waitgroup/example2/readme.md b/waitgroup/example2/readme.md new file mode 100644 index 0000000..251bcc2 --- /dev/null +++ b/waitgroup/example2/readme.md @@ -0,0 +1 @@ +> 用waitgroup限制并发数量的用法 \ No newline at end of file