diff --git a/queue.go b/queue.go new file mode 100644 index 0000000..02249da --- /dev/null +++ b/queue.go @@ -0,0 +1,32 @@ +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) + } + } +}