
记录一个非常好的线程安全队列写法。非常方便、简洁的实现。
1 2 3 4 5 6 7 8 9 10 11 12 13
|
template <typename T> class { public: void Insert(T value); void Popup(T &value); bool Empety(); private: mutable std::mutex mut_; std::queue<T> que_; std::condition_variable cond_; };
|
对应接口实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
template <typename T> void ThreadSafeQueue::Insert(T value) { std::lock_guard<std::mutex> lk(mut_); que_.push_back(value); cond_.notify_one(); } template <typename T> void ThreadSafeQueue::Popup(T &value) { std::unique_lock<std::mutex> lk(mut_); cond_.wait(lk, [this]{return !que_.empety();}); value = que_.front(); que_.pop(); } template <typename T> bool ThreadSafeQueue::Empty() const { std::lock_guard<std::mutex> lk(mut_); return que_.empty(); }
|
近期评论