]> 127.0.0.1 Git - part/.git/commitdiff
97mq
authorqydysky <qydysky@foxmail.com>
Sun, 3 Jan 2021 13:11:10 +0000 (21:11 +0800)
committerqydysky <qydysky@foxmail.com>
Sun, 3 Jan 2021 13:11:10 +0000 (21:11 +0800)
msgq/Msgq.go
msgq/Msgq_test.go

index 07e873ee0ad4176a46757d71d5d2d859ff6331cd..1fcd332c6eaf711242f932c544abb114fec078f7 100644 (file)
@@ -8,7 +8,7 @@ import (
 
 type Msgq struct {
        data_list *list.List
-       wait_push chan bool
+       wait_push chan struct{}
        max_data_mun int
        sig uint64
        sync.RWMutex
@@ -21,7 +21,7 @@ type Msgq_item struct {
 
 func New(want_max_data_mun int) (*Msgq) {
        m := new(Msgq)
-       (*m).wait_push = make(chan bool,100)
+       (*m).wait_push = make(chan struct{},10)
        (*m).data_list = list.New()
        (*m).max_data_mun = want_max_data_mun
        return m
@@ -35,7 +35,7 @@ func (m *Msgq) Push(msg interface{}) {
                sig:m.get_sig(),
        })
        if m.data_list.Len() > m.max_data_mun {m.data_list.Remove(m.data_list.Front())}
-       for len(m.wait_push) == 0 {m.wait_push <- true}
+       for len(m.wait_push) == 0 {m.wait_push <- struct{}{}}
        select {
        case <- m.wait_push:
        case <- time.After(time.Millisecond):
index a753f6dfe4a91b422ef3d7858221e0e2f67fc165..867473c81eeddba211b52ab161a9e1788379688b 100644 (file)
@@ -107,6 +107,30 @@ func Test_msgq2(t *testing.T) {
 }
 
 func Test_msgq3(t *testing.T) {
+       mq := New(100)
+
+       mun_c := make(chan bool,100)
+       mq.Pull_tag(map[string]func(interface{})(bool){
+               `A1`:func(data interface{})(bool){
+                       if v,ok := data.(string);!ok || v != `a11`{t.Error(`1`)}
+                       mun_c <- true
+                       return false
+               },
+       })
+
+       var fin_turn = 0
+       t.Log(`start`)
+       time.Sleep(time.Second)
+       for fin_turn < 10000000 {
+               mq.Push_tag(`A1`,`a11`)
+               <-mun_c
+               fin_turn += 1
+               fmt.Print("\r",fin_turn)
+       }
+       t.Log(`fin`)
+}
+
+func Test_msgq4(t *testing.T) {
        mq := New(5)
 
        mun_c := make(chan bool,100)