11 #ifndef __CONCURRENT_QUEUE_H__ 12 #define __CONCURRENT_QUEUE_H__ 16 #include <condition_variable> 50 std::chrono::milliseconds timeout(200);
51 std::unique_lock<std::mutex> lock(mutex);
52 if (cond_var.wait_for(lock, timeout, [
this](){ return !isFull();}))
58 cond_var.notify_all();
68 std::chrono::milliseconds timeout(200);
69 std::unique_lock<std::mutex> lock(mutex);
70 if (cond_var.wait_for(lock, timeout, [
this](){ return !isEmpty();}))
77 cond_var.notify_all();
84 std::unique_lock<std::mutex> lock(mutex);
89 cond_var.notify_all();
96 bool full = queue.size() >=
max_size;
104 return queue.size() == 0;
int length() const
Returns queue's current size.
Definition: ConcurrentQueue.hh:109
std::queue< T > queue
Generic queue.
Definition: ConcurrentQueue.hh:35
bool enqueue(T data)
Add a data object to tail.
Definition: ConcurrentQueue.hh:47
std::condition_variable cond_var
Condition variable.
Definition: ConcurrentQueue.hh:31
void clear()
Clear queue.
Definition: ConcurrentQueue.hh:82
bool dequeue(T &data)
Remove data object from head.
Definition: ConcurrentQueue.hh:65
int max_size
Max size of queue.
Definition: ConcurrentQueue.hh:37
bool isFull() const
Returns whether queue is full.
Definition: ConcurrentQueue.hh:94
ConcurrentQueue(int size)
Constructor.
Definition: ConcurrentQueue.hh:41
std::mutex mutex
Mutex.
Definition: ConcurrentQueue.hh:33
bool isEmpty() const
Returns whether queue is empty.
Definition: ConcurrentQueue.hh:102
FIFO queue for threadsafe access.
Definition: ConcurrentQueue.hh:28