From c2e965e3c7d8cfc9f69be90c8719a654b348f0fd Mon Sep 17 00:00:00 2001 From: Shikong <919411476@qq.com> Date: Thu, 11 Nov 2021 12:00:18 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20channel=20=E7=94=9F=E4=BA=A7=E8=80=85/?= =?UTF-8?q?=E6=B6=88=E8=B4=B9=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base/channel/example/main.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/base/channel/example/main.go b/base/channel/example/main.go index 19959cc..02cf637 100644 --- a/base/channel/example/main.go +++ b/base/channel/example/main.go @@ -3,13 +3,12 @@ package main import ( "fmt" "sync" + "sync/atomic" ) var wg = new(sync.WaitGroup) -var once = new(sync.Once) -//consumerNum := int32 -//var consumer = atomic.N +var consumer = int32(0) func f1(ch chan int) { defer wg.Done() @@ -27,17 +26,22 @@ func f2(in chan int, out chan int) { out <- i * i } - once.Do(func() { + if atomic.AddInt32(&consumer, -1) <= 0 { // 使用完必须 close 不然将导致死锁 close(out) - }) + } } func main() { ch := make(chan int, 20) ch2 := make(chan int, 5) - wg.Add(2) + + wg.Add(1) go f1(ch) + + wg.Add(2) + atomic.AddInt32(&consumer, 2) + go f2(ch, ch2) go f2(ch, ch2) for i := range ch2 {