c++实现一个消息队列
时间: 2024-05-16 13:18:34 浏览: 143
C++消息队列
4星 · 用户满意度95%
实现一个简单的消息队列可以使用 STL 中的 queue 容器,也可以手动实现一个队列。
以下是手动实现一个消息队列的示例代码:
```c++
#include <queue>
#include <mutex>
#include <condition_variable>
template<typename T>
class MessageQueue {
public:
void push(T const& message) {
std::lock_guard<std::mutex> lock(m_mutex);
m_queue.push(message);
m_condition.notify_one();
}
bool empty() const {
std::lock_guard<std::mutex> lock(m_mutex);
return m_queue.empty();
}
bool try_pop(T& message) {
std::lock_guard<std::mutex> lock(m_mutex);
if (m_queue.empty()) {
return false;
}
message = std::move(m_queue.front());
m_queue.pop();
return true;
}
void wait_and_pop(T& message) {
std::unique_lock<std::mutex> lock(m_mutex);
m_condition.wait(lock, [this]() { return !m_queue.empty(); });
message = std::move(m_queue.front());
m_queue.pop();
}
private:
std::queue<T> m_queue;
mutable std::mutex m_mutex;
std::condition_variable m_condition;
};
```
该实现使用了模板类,可以存储任意类型的消息。其中,push() 方法用于向队列中添加消息,empty() 方法用于判断队列是否为空,try_pop() 方法用于尝试从队列中弹出一条消息,wait_and_pop() 方法则会一直阻塞直到有消息可用,并将其弹出。
需要注意的是,该实现是线程安全的,因为使用了互斥锁和条件变量来保证并发访问的正确性。
阅读全文