Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.63 KB | None | 0 0
  1. template <typename TMessage>
  2. class concurrent_message_queue final
  3. {
  4. public:
  5. static_assert(std::is_same<TMessage, std::decay_t<TMessage>>::value, "only decayed type assumed");
  6.  
  7. size_t push(TMessage&& message)
  8. {
  9. std::lock_guard<std::mutex> lock(m_mutex);
  10. m_queue.push_back(std::move(message));
  11. return m_queue.size();
  12. }
  13.  
  14. std::vector<TMessage> pull()
  15. {
  16. std::vector<TMessage> result;
  17.  
  18. {
  19. std::lock_guard<std::mutex> lock(m_mutex);
  20. std::swap(result, m_queue);
  21. }
  22.  
  23. return result;
  24. }
  25.  
  26. private:
  27. std::mutex m_mutex;
  28. std::vector<TMessage> m_queue;
  29. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement