news 2026/5/19 10:57:43

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

作者头像

张小明

前端开发工程师

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/5/18 21:43:51

【大厂都在用的部署方案】:AI + Docker高性能集成实践

第一章:AI 模型容器化部署的背景与趋势随着人工智能技术的快速发展,AI 模型从实验室研发逐步走向规模化生产环境。在这一过程中,如何高效、稳定地部署和管理模型成为关键挑战。容器化技术凭借其轻量、可移植和环境隔离的特性,逐渐…

作者头像 李华
网站建设 2026/5/17 3:41:47

四旋翼无人机飞控算法

四旋翼无人机的飞控算法涉及到姿态控制、高度控制、位置控制等方面。其中姿态控制是其中最基本的部分,它负责控制飞机的姿态(即俯仰、横滚、偏航角),使得飞机能够稳定地飞行。以下是一个简单的四旋翼无人机姿态控制的 MATLAB 源码示例,使用 PID 控制器。 % 四旋翼无人机姿…

作者头像 李华
网站建设 2026/5/18 15:03:42

【资深架构师亲授】:从零构建高可用边缘 Agent Docker 启动脚本

第一章:边缘 Agent 与 Docker 架构概述在现代分布式系统中,边缘计算逐渐成为提升响应速度与降低网络负载的关键技术。边缘 Agent 作为部署在终端设备或边缘节点上的轻量级服务组件,负责采集数据、执行策略并协同云端完成任务调度。其核心作用…

作者头像 李华
网站建设 2026/5/18 15:47:51

【健康管理】心理障碍 评估方法 自测表

健康管理 相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 慢性病相关文章: 1.【健康管理】第4章 常见慢性病 1/2 2.【健康管理】第4章 常见慢性病 4.5 冠心病 3.【健康管理】第4章 常见慢性病 4.6 脑卒中 4.【健康管理】…

作者头像 李华
网站建设 2026/5/19 9:17:01

音频编辑Audition AU2026百度云盘下载与安装步骤

想必大家不会陌生,AU全称Adobe Audition,是一款功能强大且应用较为广泛的音频编辑软件工具,常被应用于音乐制作、广播、影视后期、游戏音效设计等领域。支持Windows和macOS系统,提供多轨和波形编辑模式,具备强大的音频…

作者头像 李华