q5/queue.go
aozhiwei 4f7255c731 1
2024-04-26 13:24:04 +08:00

42 lines
679 B
Go

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()
}