zhangmeng
2019-05-20 0f27a87065cd0446e9a491357d440dc67e36ea0d
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()
   }