Advertisement
sve_vash

Untitled

Jan 27th, 2020
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.81 KB | None | 0 0
  1. #include <iostream>
  2. #include <thread>
  3. #include <functional>
  4. #include <queue>
  5. #include <mutex>
  6. #include <utility>
  7.  
  8. template <typename T>
  9. class Queue {
  10. public:
  11. Queue() : queue_(), mutex_() {}
  12. ~Queue() = default;
  13. T Pop() {
  14. mutex_.lock();
  15. auto val = std::forward<T>(queue_.front());
  16. queue_.pop();
  17. mutex_.unlock();
  18. return val;
  19. }
  20. size_t Size() {
  21. mutex_.lock();
  22. auto size = queue_.size();
  23. mutex_.unlock();
  24. return size;
  25. }
  26. template <typename U>
  27. void Push(U&& val) {
  28. mutex_.lock();
  29. queue_.push(std::forward<U>(val));
  30. mutex_.unlock();
  31. }
  32. template <typename... U>
  33. void Emplace(U&&... val) {
  34. mutex_.lock();
  35. queue_.emplace(std::forward<U>(val)...);
  36. mutex_.unlock();
  37. }
  38.  
  39. private:
  40. std::queue<T> queue_;
  41. std::mutex mutex_;
  42. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement