men chan bool
}
-type cancle int
-
func New() (*msgq) {
l := new(msgq)
(*l).o = make(chan interface{})
}
}
-func (m *msgq) Pull(cancleId int) (o interface{}) {
+func (m *msgq) Pull() (o interface{}) {
m.men <- true
- for {
- o = <- m.o
- if v,ok := o.(cancle);!ok || int(v) != cancleId {break}
- }
- return
+ return <- m.o
}
-
-func (m *msgq) Cancle(cancleId int) {
- m.Push(cancle(cancleId))
-}
\ No newline at end of file
func Test_msgq(t *testing.T) {
mq := New()
go func(){
- for mq.Pull(0).(string) == `mmm` {;}
+ for mq.Pull().(string) == `mmm` {;}
t.Error(`0`)
- }()
+ }()
go func(){
- for {
- o := mq.Pull(1)
- if o.(string) == `mmm` || o == nil {continue}
- break
- }
- t.Error(`1`)
+ for mq.Pull().(string) == `mmm` {;}
+ t.Error(`0`)
}()
p.Sys().Timeoutf(1)
mq.Push(`mmm`)
- p.Sys().Timeoutf(1)
- mq.Cancle(1)
- mq.Push(`mmm`)
}