写点什么

C++ 实现消息队列

作者:linux大本营
  • 2023-04-20
    湖南
  • 本文字数:941 字

    阅读完需:约 3 分钟

下面是 C++ 实现消息队列的一个基本示例:


#include <iostream>#include <queue>#include <mutex>#include <condition_variable>
class MessageQueue {public: void Enqueue(int message) { std::lock_guard<std::mutex> lock(mutex_); queue_.push(message); cond_.notify_one(); }
int Dequeue() { std::unique_lock<std::mutex> lock(mutex_); cond_.wait(lock, [this]{ return !queue_.empty(); }); int message = queue_.front(); queue_.pop(); return message; }
private: std::queue<int> queue_; std::mutex mutex_; std::condition_variable cond_;};
int main() { MessageQueue queue;
// 生产者线程 std::thread producer([&]{ for (int i = 1; i <= 10; ++i) { std::cout << "Enqueue: " << i << std::endl; queue.Enqueue(i); std::this_thread::sleep_for(std::chrono::milliseconds(100)); } });
// 消费者线程 std::thread consumer([&]{ for (int i = 1; i <= 10; ++i) { int message = queue.Dequeue(); std::cout << "Dequeue: " << message << std::endl; std::this_thread::sleep_for(std::chrono::milliseconds(500)); } });
producer.join(); consumer.join();
return 0;}
复制代码


在这个示例中,我们实现了一个包含 Enqueue 和 Dequeue 两个操作的消息队列。消息队列使用了 STL 容器 std::queue 实现,并且使用了 mutex 和 condition_variable 来保证多线程之间的同步。


在主函数中,我们创建了一个消息队列,并且创建了两个线程:生产者线程和消费者线程。生产者线程用于向队列中不断添加消息,消费者线程用于从队列中不断取出消息。在添加和取出消息的过程中,都使用了线程安全的 Enqueue 和 Dequeue 函数。


这样的设计可以有效避免多线程同步的问题,确保消息队列的顺序执行。当然,代码中还可以加入更多的安全机制来提高鲁棒性和可靠性。

相关技术视频教程:c/c++ linux服务器开发/后台架构师免费学习地址

c/c++后端技术交流群:812855908

用户头像

还未添加个人签名 2020-11-26 加入

C/C++linux服务器开发群 812855908

评论

发布
暂无评论
C++实现消息队列_C++_linux大本营_InfoQ写作社区