c++ 写一个线程的的消息队列
时间: 2024-05-14 07:18:24 浏览: 156
workqueue:C++11线程作业队列
以下是一个简单的 C++ 实现线程消息队列的示例代码:
```c++
#include <iostream>
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
std::queue<int> message_queue;
std::mutex mtx;
std::condition_variable cv;
void producer()
{
for (int i = 0; i < 10; ++i)
{
std::unique_lock<std::mutex> lock(mtx);
message_queue.push(i);
std::cout << "Producer: " << i << std::endl;
lock.unlock();
cv.notify_one();
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
void consumer()
{
while (true)
{
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return !message_queue.empty(); });
int message = message_queue.front();
message_queue.pop();
std::cout << "Consumer: " << message << std::endl;
lock.unlock();
std::this_thread::sleep_for(std::chrono::seconds(2));
}
}
int main()
{
std::thread producer_thread(producer);
std::thread consumer_thread(consumer);
producer_thread.join();
consumer_thread.join();
return 0;
}
```
该示例中,生产者线程向消息队列中推送消息,消费者线程从队列中取出消息处理。生产者和消费者都访问了共享的消息队列和互斥量 mtx,为了避免竞争,我们使用了互斥锁和条件变量 cv 来实现线程同步。当生产者向队列中推送消息时,调用 cv.notify_one() 来唤醒等待的消费者线程。当队列中有消息时,消费者线程通过调用 cv.wait() 进入等待状态,等待生产者线程的通知。
阅读全文