1#ifndef LIPH_CONCURRENCY_BLOCKING_QUEUE_H_
2#define LIPH_CONCURRENCY_BLOCKING_QUEUE_H_
21 std::shared_lock<std::shared_mutex> rlock(mutex_);
26 std::unique_lock<std::shared_mutex> wlock(mutex_);
30 template <
class... Args>
32 std::unique_lock<std::shared_mutex> wlock(mutex_);
33 queue_.emplace(std::forward<Args>(args)...);
37 std::unique_lock<std::shared_mutex> wlock(mutex_);
38 if (!queue_.empty()) queue_.pop();
42 std::unique_lock<std::shared_mutex> wlock(mutex_);
43 if (queue_.empty())
return false;
44 v = std::move(queue_.front());
51 mutable std::shared_mutex mutex_;
Definition: blocking_queue.h:13
void emplace(Args &&...args)
Definition: blocking_queue.h:31
void pop()
Definition: blocking_queue.h:36
~blocking_queue()=default
void push(const T &v)
Definition: blocking_queue.h:25
bool pop(T &v)
Definition: blocking_queue.h:41
bool empty() const
Definition: blocking_queue.h:18
size_t size() const
Definition: blocking_queue.h:20
Definition: noncopyable.h:30
Definition: algorithm.h:10