在C++中,可以使用std::queue作为消息队列来实现线程间的通信。以下是一个示例,演示了如何使用std::queue作为消息队列实现线程通信:
#include <iostream>
#include <thread>
#include <queue>
#include <mutex>
#include <condition_variable>
std::queue<int> messageQueue; // 消息队列
std::mutex mtx; // 互斥锁
std::condition_variable cv; // 条件变量
// 生产者线程函数,向消息队列中添加消息
void producerFunction() {
for (int i = 1; i <= 5; ++i) {
// 创建消息
int message = i;
// 将消息添加到队列
{
std::lock_guard<std::mutex> lock(mtx);
messageQueue.push(message);
std::cout << "Produced message: " << message << std::endl;
}
// 通知等待的消费者线程
cv.notify_one();
// 模拟一些工作
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
}
// 消费者线程函数,从消息队列中获取消息
void consumerFunction() {
while (true) {
// 等待消息队列非空
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [] { return !messageQueue.empty(); });
// 从队列中获取消息
int message = messageQueue.front();
messageQueue.pop();
std::cout << "Consumed message: " << message << std::endl;
// 检查是否为终止信号
if (message == 5) {
break;
}
}
}
int main() {
// 创建生产者线程和消费者线程
std::thread producer(producerFunction);
std::thread consumer(consumerFunction);
// 等待线程执行完成
producer.join();
consumer.join();
return 0;
}
在这个示例中,我们使用了std::queue<int>作为消息队列来存储整数消息。生产者线程负责生成消息并将其添加到队列中,而消费者线程则负责从队列中获取消息并进行处理。为了实现线程安全,我们使用了互斥锁(std::mutex)来保护消息队列的访问,并使用条件变量(std::condition_variable)来实现生产者-消费者模式的同步。