You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

46 lines
633 B

package container
import (
"container/list"
"fmt"
"sync"
)
type Queue struct {
sync.Mutex
data *list.List
}
func NewQueue() *Queue {
q := new(Queue)
q.data = list.New()
return q
}
func (q *Queue) Len() int {
return q.data.Len()
}
func (q *Queue) Push(v interface{}) {
defer q.Unlock()
q.Lock()
q.data.PushFront(v)
}
func (q *Queue) Pop() interface{} {
defer q.Unlock()
q.Lock()
iter := q.data.Back()
if iter == nil {
return nil
}
v := iter.Value
q.data.Remove(iter)
return v
}
func (q *Queue) Dump() {
for iter := q.data.Back(); iter != nil; iter = iter.Prev() {
fmt.Println("item:", iter.Value)
}
}