C++循环队列的多线程应用案例

   2024-10-06 3890
核心提示:循环队列在多线程应用中经常用于实现生产者消费者模型。下面是一个简单的C++多线程应用案例,利用循环队列实现生产者消费者模型

循环队列在多线程应用中经常用于实现生产者消费者模型。下面是一个简单的C++多线程应用案例,利用循环队列实现生产者消费者模型:

#include <iostream>#include <queue>#include <thread>#include <mutex>#include <condition_variable>const int QUEUE_SIZE = 10;std::queue<int> q;std::mutex mtx;std::condition_variable cv;void producer() {    for (int i = 0; i < 100; ++i) {        std::unique_lock<std::mutex> lock(mtx);        cv.wait(lock, []{ return q.size() < QUEUE_SIZE; });        q.push(i);        lock.unlock();        cv.notify_all();    }}void consumer() {    for (int i = 0; i < 100; ++i) {        std::unique_lock<std::mutex> lock(mtx);        cv.wait(lock, []{ return !q.empty(); });        int val = q.front();        q.pop();        std::cout << "Consumed: " << val << std::endl;        lock.unlock();        cv.notify_all();    }}int main() {    std::thread prod_thread(producer);    std::thread cons_thread(consumer);    prod_thread.join();    cons_thread.join();    return 0;}

在这个案例中,我们使用一个循环队列q来存储生产者产生的数据,队列的最大容量为QUEUE_SIZE。生产者线程不断向队列中添加数据,如果队列已满,则等待消费者线程消费数据;消费者线程不断从队列中取出数据进行消费,如果队列为空,则等待生产者线程生产数据。

通过使用互斥量mtx和条件变量cv,我们实现了线程间的同步和通信。生产者线程在生产数据时会获取互斥量,然后判断队列是否已满,如果已满则等待消费者线程通知;消费者线程在消费数据时会获取互斥量,然后判断队列是否为空,如果为空则等待生产者线程通知。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号