queue.go 544 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package concurrent
  2. import (
  3. "sync"
  4. "git.ali33.ru/fcg-xvii/go-tools/containers"
  5. )
  6. func NewQueue() *Queue {
  7. return &Queue{
  8. q: containers.NewQueue(),
  9. m: new(sync.RWMutex),
  10. }
  11. }
  12. type Queue struct {
  13. q *containers.Queue
  14. m *sync.RWMutex
  15. }
  16. func (s *Queue) Size() (size int) {
  17. s.m.RLock()
  18. size = s.q.Size()
  19. s.m.RUnlock()
  20. return
  21. }
  22. func (s *Queue) Push(val ...interface{}) {
  23. s.m.Lock()
  24. s.q.Push(val...)
  25. s.m.Unlock()
  26. }
  27. func (s *Queue) Pop() (val interface{}, check bool) {
  28. s.m.Lock()
  29. val, check = s.q.Pop()
  30. s.m.Unlock()
  31. return
  32. }