线程安全队列

记录一个非常好的线程安全队列写法。非常方便、简洁的实现。

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
// thread_safe_queue.cpp
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();
}