20 #include <condition_variable>
57 bool pop(T & dest, uint32_t msecs);
99 std::lock_guard<std::mutex> lock(mutex);
100 queue.push(std::move(data));
101 increase.notify_all();
104 template <
typename T>
107 std::unique_lock<std::mutex> lock(mutex);
114 std::swap(dest, queue.front());
116 decrease.notify_all();
120 template <
typename T>
123 std::unique_lock<std::mutex> lock(mutex);
125 if (queue.empty() && increase.wait_for(lock, std::chrono::milliseconds(msecs)) == std::cv_status::timeout)
131 std::swap(dest, queue.front());
133 decrease.notify_all();
137 template <
typename T>
140 std::unique_lock<std::mutex> lock(mutex);
144 template <
typename T>
148 std::unique_lock<std::mutex> lock(mutex);
149 std::swap(queue, empty);
150 decrease.notify_all();
153 template <
typename T>
156 std::unique_lock<std::mutex> lock(mutex);
157 decrease.wait(lock, [
this](){
return queue.empty(); });
160 template <
typename T>
163 std::unique_lock<std::mutex> lock(mutex);
164 return decrease.wait_for(lock, std::chrono::milliseconds(msecs), [
this](){
return queue.empty(); });
167 template <
typename T>
171 std::unique_lock<std::mutex> lock(mutex);
172 std::swap(queue, empty);
173 increase.notify_all();
174 decrease.notify_all();