下面是 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
评论