深入实战:使用条件变量实现生产者-消费者模型 - 教程
各类资料学习下载合集
链接: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>
void err_thread(int ret, char *str) {
if (ret != 0) {
fprintf(stderr, "%s: %s\n", str, strerror(ret));
pthread_exit(NULL); // 遇到错误退出当前线程
}
}
二、 核心数据结构与同步工具
1. 公共区设计:链表
我们将使用一个简单的单向链表来模拟“公共区”(仓库)。生产者往链表头插数据,消费者从链表头取数据。
// 链表节点结构体
struct msg {
int num;
struct msg *next;
浙公网安备 33010602011771号