type Msgq struct {
data_list *list.List
- wait_push chan bool
+ wait_push chan struct{}
max_data_mun int
sig uint64
sync.RWMutex
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
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):
}
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)