news 2026/8/19 21:07:25

代码逐行解析:用链表和条件变量实现生产者-消费者模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码逐行解析:用链表和条件变量实现生产者-消费者模型

各类资料学习下载合集
链接:https://pan.quark.cn/s/b0a2f36933de

在前面的学习中,我们掌握了生产者-消费者模型的理论基础和条件变量的核心功能。现在,是时候将理论付诸实践了!本文将通过一个约 70 行的完整 C 语言代码示例,逐行分析如何使用链表、互斥锁和条件变量,构建一个健壮的生产者-消费者模型。


一、 蓝图设计:共享数据与同步机制

在动手写代码之前,我们先规划好模型的“骨架”。

1. 共享数据结构

我们将使用一个链表来模拟可以无限增长的“公共区”(缓冲区)。

// 链表节点,代表一个“产品”structmsg{intnum;structmsg*next;};// 全局头指针,指向链表的第一个产品structmsg*head=NULL;

2. 同步机制

我们需要两种工具来保证线程安全和同步:

  • 互斥锁 (Mutex):保护对全局头指针head的访问,确保链表操作的原子性。
  • 条件变量 (Condition Variable):用于线程间的通信,当链表为空时,通知消费者“等待”;当新产品加入时,通知消费者“开工”。

我们将使用静态初始化的方式来定义它们,这种方式代码简洁,适用于全局变量。

// 静态初始化互斥锁pthread_mutex_tlock=PTHREAD_MUTEX_INITIALIZER;// 静态初始化条件变量,代表“有产品”这个条件pthread_cond_thas_product=PTHREAD_COND_INITIALIZER;

二、 消费者函数 (consumer) 深度分析

消费者的任务是:当有产品时,从链表中取出并消费;没有产品时,则等待。

void*consumer(void*arg){structmsg*mp;while(1){// 1. 加锁,准备访问共享链表pthread_mutex_lock(&lock);// 2. 核心:使用 while 循环检查条件while(head==NULL){printf("--- [消费者] 链表为空, 等待产品...\n");// 3. 等待条件满足// 该函数会原子性地:①解锁lock ②阻塞线程 ③被唤醒后重新加锁lockpthread_cond_wait(&has_product,&lock);}// 4. 条件满足,消费数据(代码执行到这里,必然持有锁)mp=head;head=mp->next;// 摘除头节点printf("=== [消费者] 消费数据: %d\n",mp->num);// 5. 解锁,让其他线程可以访问链表pthread_mutex_unlock(&lock
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 13:56:13

手把手教你实现生产者-消费者模型(条件变量版)

各类资料学习下载合集 链接:https://pan.quark.cn/s/b0a2f36933de 生产者-消费者模型是多线程编程的“Hello, World!”,也是面试中的高频考点。本文将提供一份“食谱级”的详细指南,带你一步一步、从零开始,使用互斥锁和条件变量构建一个健壮的生产者-消费者模型。 一、 准…

作者头像 李华
网站建设 2026/8/19 7:01:58

【Matlab】matlab代码实现随机潮流计算

以下是一个基本的 MATLAB 代码实现随机潮流计算的示例。这个示例假设你已经有了潮流方程和雅可比矩阵的函数,并且已经定义了系统的节点和支路数据。% 系统数据 节点数据 [1, 100, 1.05, 0, 0; 2, 0, 1, 0, 0; 3, 0, 1, 0, 0]; % 节点数据:节点编号&…

作者头像 李华
网站建设 2026/8/18 2:17:33

【Agent服务Docker隔离实战】:20年专家揭秘高效环境隔离的5大核心策略

第一章:Agent服务Docker隔离的核心价值 在现代分布式系统架构中,Agent服务承担着监控、日志采集、配置同步等关键任务。将Agent服务运行于Docker容器中,不仅能实现环境一致性,还能通过资源隔离提升系统整体的稳定性与安全性。 环…

作者头像 李华
网站建设 2026/8/19 1:41:22

WVP-GB28181-Pro视频监控平台实战部署:企业级解决方案深度解析

WVP-GB28181-Pro视频监控平台实战部署:企业级解决方案深度解析 【免费下载链接】wvp-GB28181-pro 项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro 在数字化转型浪潮中,企业面临着视频监控系统部署的诸多挑战:设备…

作者头像 李华
网站建设 2026/8/18 6:26:06

揭秘机器视觉环形光源:95%的检测难题迎刃而解!

在智能制造飞速发展的今天,机器视觉技术正成为工业自动化的"火眼金睛"。而在这双"慧眼"背后,环形光源扮演着至关重要的角色——它是确保检测精度的"灵魂之光"!为什么环形光源如此重要?想象一下&…

作者头像 李华