合理利用消息队列可以有效解决应用程序处理速度和异步线程问题。
此案例为点对点消息队列模式(多个生产者,一个消费者)
#include <iostream>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <thread>
//#include <optional>
#include <memory>
template <typename T>
class ConcurrentQueue {
public:
ConcurrentQueue() = default;
void Enqueue(const T& item) {
std::lock_guard<std::mutex> lock(mutex_);
queue_.push(item);
cond_var_.notify_one();
}
std::unique_ptr<T> Dequeue() {
std::unique_lock<std::mutex> lock(mutex_);
cond_var_.wait(lock, [this]() { return !queue_.empty(); });
T item = queue_.front();
queue_.pop();
return std::make_unique<T>(item);
}
bool IsEmpty() {
std::lock_guard<std::mutex> lock(mutex_);
return queue_.empty();
}
size_t Size() {
std::lock_guard<std::mutex> lock(mutex_);
return queue_.size();
}
private:
std::queue<T> queue_;
mutable std::mutex mutex_;
std::condition_variable cond_var_;
};