This repository has been archived on 2021-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
2020-07-08 16:53:53 +02:00
|
|
|
// Shared_Queue.hh
|
|
|
|
#include <condition_variable>
|
2020-07-09 21:22:39 +02:00
|
|
|
#include <iostream>
|
2020-07-08 16:53:53 +02:00
|
|
|
#include <mutex>
|
|
|
|
#include <queue>
|
|
|
|
|
|
|
|
#ifndef SHARED_QUEUE_HH
|
|
|
|
#define SHARED_QUEUE_HH
|
|
|
|
template <class T>
|
|
|
|
class SharedQueue
|
|
|
|
{
|
2020-07-09 18:09:10 +02:00
|
|
|
public:
|
|
|
|
SharedQueue() :
|
|
|
|
_q(),
|
|
|
|
_q_mutex(),
|
|
|
|
_q_cv()
|
|
|
|
{};
|
2020-07-08 16:53:53 +02:00
|
|
|
|
2020-07-09 18:09:10 +02:00
|
|
|
SharedQueue( const SharedQueue& other )
|
|
|
|
{
|
2020-07-09 21:22:39 +02:00
|
|
|
std::cout << "Copy Constructor SharedQueue" << std::endl;
|
2020-07-09 18:09:10 +02:00
|
|
|
// (Read)Lock the other queue for copying
|
2020-07-09 21:22:39 +02:00
|
|
|
std::unique_lock<std::mutex> other_lock(other._q_mutex);
|
2020-07-09 18:09:10 +02:00
|
|
|
_q = other._q;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::queue<T> * queue() { return& _q; }
|
|
|
|
std::mutex * mutex() { return& _q_mutex; }
|
|
|
|
std::condition_variable * cv() { return& _q_cv; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
// Queue
|
|
|
|
std::queue<T> _q;
|
|
|
|
|
|
|
|
// Synchronisation
|
2020-07-09 21:22:39 +02:00
|
|
|
std::mutex _q_mutex;
|
|
|
|
std::condition_variable _q_cv;
|
2020-07-08 16:53:53 +02:00
|
|
|
};
|
|
|
|
#endif
|