Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++消息队列

作者:徒醉了清风   发布日期:2026-07-03   浏览:28

#include <iostream>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <thread>

class MessageQueue {
public:
    void enqueue(int message) {
        std::lock_guard<std::mutex> lock(mtx);
        queue.push(message);
        cond.notify_one(); // 通知等待的线程有新消息
    }

    int dequeue() {
        std::unique_lock<std::mutex> lock(mtx);
        cond.wait(lock, [this] { return !queue.empty(); }); // 等待直到队列不为空
        int message = queue.front();
        queue.pop();
        return message;
    }

private:
    std::queue<int> queue;
    std::mutex mtx;
    std::condition_variable cond;
};

void producer(MessageQueue& mq, int num_messages) {
    for (int i = 0; i < num_messages; ++i) {
        std::cout << "Producing message " << i << std::endl;
        mq.enqueue(i);
        std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟生产时间
    }
}

void consumer(MessageQueue& mq, int num_messages) {
    for (int i = 0; i < num_messages; ++i) {
        int message = mq.dequeue();
        std::cout << "Consuming message " << message << std::endl;
        std::this_thread::sleep_for(std::chrono::milliseconds(150)); // 模拟消费时间
    }
}

int main() {
    MessageQueue mq;
    const int num_messages = 10;

    std::thread t1(producer, std::ref(mq), num_messages);
    std::thread t2(consumer, std::ref(mq), num_messages);

    t1.join();
    t2.join();

    return 0;
}

解释说明

  1. MessageQueue 类:

    • enqueue(int message):将消息加入队列,并通知等待的线程。
    • dequeue():从队列中取出消息,如果队列为空则等待。
  2. 线程同步机制:

    • 使用 std::mutexstd::lock_guard 来确保对共享资源(队列)的互斥访问。
    • 使用 std::condition_variable 来实现线程间的通信,当有新消息时通知等待的消费者线程。
  3. 生产者和消费者线程:

    • producer 函数模拟生产消息并将其加入队列。
    • consumer 函数从队列中取出消息并处理。
  4. 主函数:

    • 创建一个 MessageQueue 实例。
    • 启动两个线程分别执行生产和消费操作。
    • 使用 join 确保主线程等待子线程完成。

上一篇:校门外的树c++编程怎么打

下一篇:c++ 开发

大家都在看

c++闭包

c++向上取整的代码

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++怎么输入字符串

c++字符串切片

c++ functional

c++框架代码

c++格式化字符串

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站