INFM HIL Interface
Interface between Artery simulation and DuTs
SharedQueue.h
1
25#ifndef SIM_TO_DUT_INTERFACE_SHAREDQUEUE_H
26#define SIM_TO_DUT_INTERFACE_SHAREDQUEUE_H
27
28#include <queue>
29#include <mutex>
30#include <condition_variable>
31
32namespace sim_interface {
39 template<class T>
41 public:
45 SharedQueue() = default;
46
50 SharedQueue(const SharedQueue<T> &) = delete;
51
56 void push(T elem) {
57 std::unique_lock<std::mutex> lock(mutex);
58 if (enqueue) {
59 queue.push(elem);
60 conditionVariable.notify_one();
61 }
62 }
63
69 bool pop(T &elem) {
70 std::unique_lock<std::mutex> lock(mutex);
71 while (queue.empty() && !requestEnd) {
72 conditionVariable.wait(lock);
73 }
74 if (requestEnd) {
75 End();
76 return false;
77 }
78 elem = queue.front();
79 queue.pop();
80 return true;
81 }
82
86 void Stop() {
87 std::unique_lock<std::mutex> lock(mutex);
88 requestEnd = true;
89 conditionVariable.notify_one();
90 }
91
95 virtual ~SharedQueue() {
96 Stop();
97 }
98
99 private:
100 void End() {
101 enqueue = false;
102 while (!queue.empty()) {
103 queue.pop();
104 }
105 }
106
107 std::queue<T> queue;
108 std::mutex mutex;
109 std::condition_variable conditionVariable;
110 bool requestEnd = false;
111 bool enqueue = true;
112 };
113}
114
115#endif //SIM_TO_DUT_INTERFACE_SHAREDQUEUE_H
A thread save shared queue to communicate between multiple threads. The queue is a FIFO queue.
Definition: SharedQueue.h:40
SharedQueue(const SharedQueue< T > &)=delete
void Stop()
Definition: SharedQueue.h:86
bool pop(T &elem)
Definition: SharedQueue.h:69
virtual ~SharedQueue()
Definition: SharedQueue.h:95
void push(T elem)
Definition: SharedQueue.h:56
Definition: CANConnector.cpp:29