用链表实现生产者消费者模型

本文介绍了生产者消费者模型,其中生产者进程生产产品并存入缓冲区,消费者进程从缓冲区取出产品消费。在实际开发中,这种模型常见于数据生产与处理的场景。文章提到,生产者将数据结构体插入链表头部,消费者则从链表头部取出结构体。环形缓冲区被用于实现这一模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生产者消费者模型:有一群生产者在生产产品,并将这些产品提供给消费者去消费。为使生产者进程和消费者进程能并发执行,在两者之间设置缓冲区,生产者进程将其所生产的产品放入缓冲区中;消费者进程可从缓冲区中取走产品进行消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,既不允许消费者进程到空缓冲区去取产品,也不允许生产者进程想一个已装满产品的缓冲区中投放产品。

在实际的开发中,经常会碰到如下场景:某个模块负责生产数据,这些数据由另一个模块来负责处理。产生数据的模块就形象的称为生产者,而处理数据的模块就称为消费者。只有生产者和消费者还不够,这个模型还必须要有一个缓冲区处于生产者和消费者之间,作为中介。生产者把数据放入缓冲区,而消费者从缓冲区中取出数据。 

  生产者生产一个结构体串在链表的表头上,消费者从表头取一个结构体。

#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<stdlib.h>
#include<assert.h>

typedef struct Node
{
    int data;
    struct Node * next;
}Node,*Node_p,**Node_pp;

Node_p CreatNode(int data)
{
    Node_p _n=(Node_p)malloc(sizeof(Node));
    if(_n==NULL)
    {
        return NU
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值