From 0f27a87065cd0446e9a491357d440dc67e36ea0d Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期一, 20 五月 2019 16:20:34 +0800 Subject: [PATCH] add shm multi send one recv --- shm.go | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff --git a/shm.go b/shm.go index 9611975..abb0ba5 100644 --- a/shm.go +++ b/shm.go @@ -5,6 +5,7 @@ "fmt" "os" "os/signal" + "sync" "time" "golang.org/x/sys/unix" @@ -42,14 +43,14 @@ go shmSenderImpl(s) c := make(chan os.Signal, 1) - signal.Notify(c, os.Interrupt, os.Kill, unix.SIGTERM) + signal.Notify(c, os.Interrupt, os.Kill, unix.SIGINT) <-c cancel() s.Close() } -func shmRecvImpl(c deliver.Deliver, url string, index int) { +func shmRecvImpl(wg *sync.WaitGroup, c deliver.Deliver, url string, index int) { var msg []byte var err error @@ -61,6 +62,7 @@ for { select { case <-ctx.Done(): + wg.Done() return default: msg, err = c.Recv() @@ -85,15 +87,19 @@ // time.Sleep(10 * time.Millisecond) } + } func shmReciever(url string, count int) { + wg := sync.WaitGroup{} + var cs []deliver.Deliver for i := 0; i < count; i++ { + wg.Add(1) c := deliver.NewClient(deliver.Shm, url) cs = append(cs, c) - go shmRecvImpl(c, url, i) + go shmRecvImpl(&wg, c, url, i) } c := make(chan os.Signal, 1) @@ -101,6 +107,7 @@ <-c cancel() + wg.Wait() for _, v := range cs { v.Close() } -- Gitblit v1.8.0