Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <utility>
- #include <mutex>
- #include <queue>
- template <typename T> class Queue {
- public:
- T Pop();
- size_t Size();
- template <typename U>
- void Push(U var);
- template <typename... U>
- void Emplace(U &&... args);
- private:
- std::queue<T> data;
- std::mutex access;
- };
- template <typename T>
- inline T Queue<T>::Pop() {
- std::lock_guard<std::mutex> mutex_lock(access);
- T res = std::move(data.front());
- data.pop();
- return res;
- }
- template <typename T>
- inline size_t Queue<T>::Size() {
- std::lock_guard<std::mutex> mutex_lock(access);
- return data.size();
- }
- template <typename T>
- template <typename U>
- inline void Queue<T>::Push(U value) {
- access.lock();
- data.push(std::move(value));
- access.unlock();
- }
- template <typename T>
- template <typename... U>
- inline void Queue<T>::Emplace(U &&... args) {
- access.lock();
- data.emplace(std::forward<U &&...>(args...));
- access.unlock();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement