package q5 import ( "sync" ) type Queue struct { msgMutex sync.Mutex msgList ListHead WorkList ListHead } func (this *Queue) Init() { this.msgList.Init(nil) this.WorkList.Init(nil) } func (this *Queue) Push(node *ListHead) { this.msgMutex.Lock() defer this.msgMutex.Unlock() this.msgList.AddTail(node) } func (this *Queue) Fetch() { if this.WorkList.Empty() { this.msgMutex.Lock() defer this.msgMutex.Unlock() if !this.msgList.Empty() { this.msgList.ReplaceInit(&this.WorkList) } } } func (this *Queue) IsEmpty() bool { if !this.WorkList.Empty() { return false } this.msgMutex.Lock() defer this.msgMutex.Unlock() return this.msgList.Empty() }