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

syncqueue.go 481 B

12345678910111213141516171819202122232425262728293031323334
  1. package socketwrap
  2. import (
  3. "container/list"
  4. "sync"
  5. )
  6. type SyncQueue struct {
  7. Queue *list.List
  8. Mutex *sync.RWMutex
  9. MaxSize int
  10. }
  11. func (q *SyncQueue) Push(value interface{}) {
  12. q.Mutex.Lock()
  13. {
  14. if q.Queue.Len() < q.MaxSize {
  15. q.Queue.PushBack(value)
  16. } else {
  17. q.Queue.PushBack(value)
  18. q.Queue.Remove(q.Queue.Front())
  19. }
  20. }
  21. q.Mutex.Unlock()
  22. }
  23. func NewSyncQueue(maxSize int) *SyncQueue {
  24. return &SyncQueue{
  25. list.New(),
  26. &sync.RWMutex{},
  27. maxSize,
  28. }
  29. }