From acadb8457fb21738f02c7d12a2b10c678b0103ca Mon Sep 17 00:00:00 2001 From: xiaowei <403828237@qq.com> Date: Tue, 25 Jan 2022 11:20:56 +0800 Subject: [PATCH] =?UTF-8?q?add:=20waitgroup=E7=9A=84=E5=87=A0=E7=A7=8D?= =?UTF-8?q?=E7=94=A8=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- waitgroup/example2/main.go | 35 +++++++++++++++++++++++++++++++++++ waitgroup/example2/readme.md | 1 + 2 files changed, 36 insertions(+) create mode 100644 waitgroup/example2/main.go create mode 100644 waitgroup/example2/readme.md 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