20 #ifndef GNSS_SDR_CONCURRENT_QUEUE_H 21 #define GNSS_SDR_CONCURRENT_QUEUE_H 24 #include <condition_variable> 29 template <
typename Data>
41 void push(Data
const& data)
43 std::unique_lock<std::mutex> lock(the_mutex);
46 the_condition_variable.notify_one();
51 std::unique_lock<std::mutex> lock(the_mutex);
52 return the_queue.empty();
55 bool try_pop(Data& popped_value)
57 std::unique_lock<std::mutex> lock(the_mutex);
58 if (the_queue.empty())
62 popped_value = the_queue.front();
67 void wait_and_pop(Data& popped_value)
69 std::unique_lock<std::mutex> lock(the_mutex);
70 while (the_queue.empty())
72 the_condition_variable.wait(lock);
74 popped_value = the_queue.front();
78 bool timed_wait_and_pop(Data& popped_value,
int wait_ms)
80 std::unique_lock<std::mutex> lock(the_mutex);
81 if (the_queue.empty())
83 the_condition_variable.wait_for(lock, std::chrono::milliseconds(wait_ms));
84 if (the_queue.empty())
89 popped_value = the_queue.front();
95 std::queue<Data> the_queue;
96 mutable std::mutex the_mutex;
97 std::condition_variable the_condition_variable;
100 #endif // GNSS_SDR_CONCURRENT_QUEUE_H This class implements a thread-safe std::queue.