深入实战:使用条件变量实现生产者-消费者模型 - 教程

各类资料学习下载合集
链接: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;
posted @ 2026-01-15 08:09  clnchanpin  阅读(8)  评论(0)    收藏  举报