chromeworker/proxyserver/queue.go
2020-11-18 19:49:46 +08:00

56 lines
1.0 KiB
Go

package main
import (
"sync"
pqueuekey "github.com/474420502/focus/priority_queuekey"
)
// Queue 存储队列
type Queue struct {
queue *pqueuekey.PriorityQueue
lock sync.Mutex
}
// NewQueue 创建队列
func NewQueue() *Queue {
q := &Queue{}
q.queue = pqueuekey.New(CompareTaskID)
return q
}
// Get 获取该值是否存在
func (q *Queue) Get(key interface{}) (result interface{}, ok bool) {
q.lock.Lock()
defer q.lock.Unlock()
return q.queue.Get(key)
}
// Push 入队
func (q *Queue) Push(key interface{}, value interface{}) {
q.lock.Lock()
defer q.lock.Unlock()
q.queue.Push(key, value)
}
// Pop 出队
func (q *Queue) Pop() (result interface{}, ok bool) {
q.lock.Lock()
defer q.lock.Unlock()
return q.queue.Pop()
}
// Remove 删除指定key
func (q *Queue) Remove(key interface{}) (result interface{}, ok bool) {
q.lock.Lock()
defer q.lock.Unlock()
return q.queue.Remove(key)
}
// Top 队头
func (q *Queue) Top() (result interface{}, ok bool) {
q.lock.Lock()
defer q.lock.Unlock()
return q.queue.Top()
}