From: qydysky Date: Sun, 3 Jan 2021 13:11:10 +0000 (+0800) Subject: 97mq X-Git-Tag: v0.3.6~7 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=549f638d81806e1763d9eadd9f8647683eb3d5da;p=part%2F.git 97mq --- diff --git a/msgq/Msgq.go b/msgq/Msgq.go index 07e873e..1fcd332 100644 --- a/msgq/Msgq.go +++ b/msgq/Msgq.go @@ -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): diff --git a/msgq/Msgq_test.go b/msgq/Msgq_test.go index a753f6d..867473c 100644 --- a/msgq/Msgq_test.go +++ b/msgq/Msgq_test.go @@ -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)