Files
origin/util/queue/syncqueue.go
2019-03-26 16:11:39 +08:00

61 lines
887 B
Go

package queue
import "sync"
type SyncQueue struct {
que *Queue
mutex sync.RWMutex
}
func (q *SyncQueue) Len() int {
q.mutex.RLock()
defer q.mutex.RUnlock()
return q.que.Length()
}
func (q *SyncQueue) Add(elem interface{}) {
q.mutex.Lock()
defer q.mutex.Unlock()
q.que.Add(elem)
}
func (q *SyncQueue) Peek() interface{} {
q.mutex.RLock()
defer q.mutex.RUnlock()
return q.que.Peek()
}
func (q *SyncQueue) Get(i int) interface{} {
q.mutex.RLock()
defer q.mutex.RUnlock()
return q.que.Get(i)
}
func (q *SyncQueue) Pop() interface{} {
q.mutex.Lock()
defer q.mutex.Unlock()
return q.que.Pop()
}
func (q *SyncQueue) RLockRange(f func(interface{})) {
q.mutex.RLock()
defer q.mutex.RUnlock()
for i := 0; i < q.que.Length(); i++ {
f(q.Get(i))
}
}
func NewSyncQueue() *SyncQueue {
syncQueue := SyncQueue{}
syncQueue.que = NewQueue()
return &syncQueue
}