各类资料学习下载合集
链接:https://pan.quark.cn/s/7c8c391011eb
在多线程编程中,生产者-消费者模型是解决“等待-通知”问题的经典范式。本篇博客将基于一个实际的 C 语言代码案例(cond_producer_consumer.c),手把手教你如何利用互斥锁和条件变量来实现这一模型。
一、 开发环境准备:Vim 配置与错误处理
在开始写代码之前,为了提高开发效率和代码健壮性,我们先做一些准备工作。
1. 优化 Vim 配置
在/etc/vim/vimrc中添加线程错误处理模板,这样每次新建.c文件时,可以自动生成错误处理函数。
2. 封装错误处理函数err_thread
线程函数的返回值通常不直接通过errno判断,而是直接返回错误码。我们封装一个函数来统一处理:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<pthread.h>voiderr_thread(intret,char*str){if(ret!=0){fprintf(stderr,"%s: %s\n",str,strerror(ret));pthread_exit(NULL);// 遇到错误退出当前线程}}二、 核心数据结构与同步工具
1. 公共区设计:链表
我们将使用一个简单的单向链表来模拟“公共区”(仓库)。生产者往链表头插数据,消费者从链表头取数据。
// 链表节点结构体structmsg{intnum;structmsg*next;